Qt QListwidget为啥信号没用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt QListwidget为啥信号没用相关的知识,希望对你有一定的参考价值。
参考技术A 头文件里的private:
Ui::MainStartUI ui;
这里的ui应该是指针——Ui::MainStartUI *ui;
源文件里——
CMainStartUI::CMainStartUI(QWidget *parent /* = 0 */) : QWidget(parent)
应该改成这样——
CMainStartUI::CMainStartUI(QWidget *parent /* = 0 */) : QWidget(parent), ui(new Ui::MainStartUI)
应该初始化头文件里的私有的Ui::MainStartUI *ui;
Qt - 何时编辑 QListWidget 行的信号?
【中文标题】Qt - 何时编辑 QListWidget 行的信号?【英文标题】:Qt - signal for when QListWidget row is edited? 【发布时间】:2014-02-26 17:43:34 【问题描述】:我在 Qt4.7 中工作,我的对话框中有一个 QListWidget。我有一个 QString 需要匹配此小部件行中的 current 文本(各个行是可编辑的)。查看与QlistWidget相关联的信号,似乎选择了不同索引的信号,但是当当前所选行的文本更改时,无以来。我认为 currentTextChanged(QString) 会这样做,但事实并非如此。我还想尝试将每一行连接到某个东西,但 QListWidgetItem 没有任何内置信号。有谁知道这样做的方法?谢谢!
【问题讨论】:
查看模型的dataChanged
信号
@DmitrySazonov 成功了,谢谢!
【参考方案1】:
起初看起来 QListWidget::itemChanged 是要走的路,但很快你就会遇到一个问题:信号被发送给所有的东西——插入、改变颜色、复选框,以及任何“改变”项目的东西! Predelnik 在他的回答中指出了这一点。一些人试图通过拦截各种信号来到处放置标志和过滤,以查明编辑是否是实际事件。它变得非常混乱。
还有 QAbstractItemModel::dataChanged ,这似乎是一个很好的解决方案。它甚至还有一个参数“const QVector& lstRoles”,因此您可以扫描 Qt::EditRole 并查看它是否真的被编辑过。唉,有一个问题 - 它会像 QListWidget::itemChanged 一样被调用,不幸的是,无论如何,对于 QListWidget,角色参数在被调用时总是空的(我试过了)。这么多的想法......
幸运的是,仍有希望...这个解决方案可以解决问题! :
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....
现在您有了一个仅在编辑列表项的文本时才被调用的槽!
【讨论】:
不错的解决方案!为我工作。确保在编辑之前选择该项目,否则currentRow()
或currentItem()
将不会返回您的想法。此外,使用 Escape 键取消编辑时不会调用该插槽。有什么想法吗?
将我的问题移至单独的帖子:***.com/questions/50409139/…【参考方案2】:
我猜你需要查看以下信号:
void QListWidget::itemChanged(QListWidgetItem * item)
但要小心,因为每次更改项目的某些属性时都会发送它,而不仅仅是文本。我记得当我们改变项目颜色并因此调用大量误报槽时遇到问题。如果您需要更多微调,我想最好自己编写模型/视图类,而不是依赖QListWidget
。
【讨论】:
以上是关于Qt QListwidget为啥信号没用的主要内容,如果未能解决你的问题,请参考以下文章
Qt - 如何从 QListWidget 中获取选定的自定义项目?
Qt/C++:检查 QListWidgetItem 时的信号?