6

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

QTableWidgetsItem->setCheckState(Qt::Checked);

我现在想在此复选框状态更改时调用一些函数。以信号为例。

实现这一目标的最简单方法可能是什么?

4

1 回答 1

5

最简单的方法是在包含 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 *

于 2013-03-19T08:38:57.500 回答