我有一个 QTableWidget,上面有一些 QTableWidgetsItems。有些项目使用复选框。我使用以下代码添加了复选框:
QTableWidgetsItem->setCheckState(Qt::Checked);
我现在想在此复选框状态更改时调用一些函数。以信号为例。
实现这一目标的最简单方法可能是什么?
最简单的方法是在包含 QTableWidget 的类中使用插槽捕获 QTableWidget 的信号。虽然这似乎QTableWidget::itemActivated
是我们最好的选择,但不确定是否在Qt::CheckState
等于时发出Qt::Checked
。此外,即使这是真的,该信号也不会为您提供处理项目取消选中的功能,您的应用程序可能需要这样做。
所以,这是我提出的解决方案。使用包含 QTableWidget 的类中定义的槽捕获QTableWidget::itemPressed
和信号。QTableWidget::itemClicked
由于 itemPressed 应该在释放鼠标按钮之前调用,并且 itemClicked 应该在释放鼠标按钮之后调用,所以 QTableWidgetItem 的 Qt::CheckState 应该只设置在这两个信号发射之间。因此,您可以准确地确定 QTableWidgetItem 的 checkState 何时以低内存开销发生变化。
以下是这些插槽的示例:
void tableItemPressed(QTableWidgetItem * item)
{
// member variable used to keep track of the check state for a
// table widget item currently being pressed
m_pressedItemState = item->checkState();
}
void tableItemClicked(QTableWidgetItem * item)
{
// if check box has been clicked
if (m_pressedItemState != item->checkState())
{
// perform check logic here
}
}
信号/插槽将按如下方式连接:
connect(m_tableWidget,SIGNAL(itemPressed(QTableWidgetItem *)),this,SLOT(tableItemPressed(QTableWidgetItem *)));
connect(m_tableWidget,SIGNAL(itemClicked(QTableWidgetItem *)),this,SLOT(tableItemClicked(QTableWidgetItem *)));
您与表格小部件相关联的m_tableWidget
位置在哪里。QTableWidget *