捕获QTableWidgetItem检查状态更改

时间:2013-03-17 02:07:38

标签: c++ qt qt4

我有一个QTableWidget,上面有一些QTableWidgetsItems。有些项目使用复选框。我已使用以下代码添加了复选框:

QTableWidgetsItem->setCheckState(Qt::Checked);

我想现在在这个复选框状态改变时调用一些函数。例如,使用信号。

最简单的方法是什么?

1 个答案:

答案 0 :(得分:3)

最简单的方法是使用包含QTableWidget的类中的slot(s)捕获QTableWidget的信号。虽然看起来QTableWidget::itemActivated可能是我们最好的选择,但当Qt::CheckState等于Qt::Checked时,不确定是否会发出这种情况。此外,即使这是真的,信号也不会为您提供处理应用程序可能需要执行的项目取消检查的功能。

所以,这是我提出的解决方案。使用包含QTableWidget的类中定义的插槽捕获QTableWidget::itemPressedQTableWidget::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 *