gpt4 book ai didi

Qt - 编辑 QListWidget 行时的信号?

转载 作者:行者123 更新时间:2023-12-01 15:51:27 25 4
gpt4 key购买 nike

我在 Qt4.7 中工作,我的对话框中有一个 QListWidget。我有一个 QString 需要匹配此小部件行中的当前文本(各个行是可编辑的)。查看与QlistWidget相关的信号,似乎有信号选择了不同的索引,但何时何时会选择当前选择的行更改。我以为 currentTextChanged(QString) 会做到这一点,但事实并非如此。我还想尝试将每一行连接到某个东西,但 QListWidgetItem 没有任何内置信号。有谁知道这样做的方法吗?谢谢!

最佳答案

一开始看起来 QListWidget::itemChanged 是可行的方法,但很快你就会遇到问题:信号被发送到所有东西——插入、改变颜色、复选框,以及任何其他“改变”项目的东西! Predelnik 在他的回答中指出了这一点。有些人试图通过拦截各种信号来在任何地方放置标志和过滤,以查明编辑是否是实际事件。它变得非常困惑。

还有 QAbstractItemModel::dataChanged ,这似乎是一个很好的解决方案。它甚至有一个参数“const QVector& lstRoles”,因此您可以扫描 Qt::EditRole 并查看它是否真的被编辑过。 las,有一个陷阱 - 它会被调用,就像 QListWidget::itemChanged 一样,不幸的是,无论如何,对于 QListWidget,roles 参数在被调用时总是空的(我试过了)。这么多的想法...

幸运的是,还有希望……这个解决方案可以解决问题! :

http://falsinsoft.blogspot.com/2013/11/qlistwidget-and-item-edit-event.html

他使用 QAbstractItemDelegate::closeEditor,但我更喜欢使用 QAbstractItemDelegate::commitData。

所以像这样建立连接......

connect(ui.pLstItems->itemDelegate(), &QAbstractItemDelegate::commitData, this, &MyWidget::OnLstItemsCommitData);

然后像这样实现槽...

void MyWidget::OnLstItemsCommitData(QWidget* pLineEdit)
{
QString strNewText = reinterpret_cast<QLineEdit*>(pLineEdit)->text();
int nRow = ui.pLstItems->currentRow();
// do whatever you need here....
}

现在您有了一个仅在编辑列表项的文本时才会调用的插槽!

关于Qt - 编辑 QListWidget 行时的信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22049129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com