是否可以在切换QTreeWidgetItem复选框时创建一个信号
Is it possible to create a signal for when a QTreeWidgetItem checkbox is toggled?
我使用下面的代码创建了一个复选框,它也是一个QTreeWidgetItem。
//Populate list
QTreeWidgetItem *program = createCheckedTreeItem(QString::fromStdString(itr->first), true);
treePrograms->addTopLevelItem(program);
QTreeWidgetItem* ConfigDialog::createCheckedTreeItem(QString name,bool checkBoxState)
{
QTreeWidgetItem *item = new QTreeWidgetItem(QStringList(name));
item->setFlags(item->flags()|Qt::ItemIsUserCheckable);
if (checkBoxState)
{
item->setCheckState(0,Qt::Unchecked);
}
else
{
item->setCheckState(0,Qt::Checked);
}
return item;
}
当这个复选框的状态改变时,我需要一种连接信号和插槽的方法。我目前实现这一点的方式如下,但不幸的是,它不起作用。有人能解释我做错了什么以及我需要做什么才能让它联系起来吗?
connect(program, SIGNAL(toggled(bool)), this, SLOT(programChecked(bool)));
您必须获取来自QTreeWidget的信号itemChanged ( QTreeWidgetItem * item, int column )
。
连接到树的信号itemClicked(QTreeWidgetItem* item, int column)
。处理信号时,只需验证item->checkState(column)
。
您的QTreeWidgetItem
直接链接到您的模型数据,因此您应该连接到QTreeWidget的模型的QAbstractItemModel::dataChanged
信号,以便收到更改通知。
我们发现的最佳解决方案是在项目子类中重新实现setData:
void MyItem::setData(int column, int role, const QVariant& value)
{
const bool isCheckChange = column == 0
&& role == Qt::CheckStateRole
&& data(column, role).isValid() // Don't "change" during initialization
&& checkState(0) != value;
QTreeWidgetItem::setData(column, role, value);
if (isCheckChange) {
MyTree *tree = static_cast<MyTree *>(treeWidget);
emit tree->itemCheckStateChanged(this, checkState(0) == Qt::Checked);
}
}
在Qt中有这个真的很方便。事实上,它让我考虑直接在那里贡献一个itemCheckStateChanged信号:)
PS:不需要设置Qt::ItemIsUserCheckable,默认情况下,所有QTreeWidgetItems都会启用此标志。
将此信号添加到QTreeWidget对象:
connect(ui->treeWidget, &QTreeWidget::itemChanged, this, &YourDialog::treeWidgetItemChanged);
所以你可以使用这个插槽来接收信号:
void YourDialog::treeWidgetItemChanged(QTreeWidgetItem *TWI, int column)
{
//Do some staff
}
相关文章:
- 多线程.如果我使用信号量,我可以在开始时创建很多线程还是应该只有几个线程?
- 如何使用拖放功能和点击信号函数QT创建标签
- 在C 中创建时间变化的信号
- 生产者 - 消费者生产商创建2个元素POSIX信号量
- Linux C++ 创建具有最大值的信号量
- 创建 std::thread c++11 时收到的 SIGABRT 信号
- Qt创建动态对象并为同一信号分配不同的功能
- 创建信号和插槽qt4gui生成器
- 在正常应用程序中,当信号量第一次由服务创建时,它被拒绝访问
- C++/QT 值创建旋转框小部件时更改(整数)信号
- 从类中创建一个信号来调用外部函数
- Do信号创建新线程
- 为什么以及何时应该使用IPC_NEW来创建信号量
- 是否可以在切换QTreeWidgetItem复选框时创建一个信号
- 我可以使用带有QTimer和信号的C++对象创建优化吗
- 如何将信号附加到动态创建的对象的插槽
- 带有插槽和信号的QThread似乎不会创建新的线程
- (Qt)从按钮的QButtonGroup创建信号
- 动态创建自定义小部件的新实例并连接信号和插槽(Qt)
- 如何模拟QTreeWidget itemClicked信号而不创建派生类