我有一个带有一些 QTableWidgetsItems 的 QTableWidget。有些项目使用复选框。我使用以下代码添加了复选框:
QTableWidgetsItem->setCheckState(Qt::Checked);
Run Code Online (Sandbox Code Playgroud)
我现在想在这个复选框状态改变时调用一些函数。例如使用信号。
实现这一目标的最简单方法是什么?
最简单的方法是在包含 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
}
}
Run Code Online (Sandbox Code Playgroud)
信号/插槽将按如下方式连接:
connect(m_tableWidget,SIGNAL(itemPressed(QTableWidgetItem *)),this,SLOT(tableItemPressed(QTableWidgetItem *)));
connect(m_tableWidget,SIGNAL(itemClicked(QTableWidgetItem *)),this,SLOT(tableItemClicked(QTableWidgetItem *)));
Run Code Online (Sandbox Code Playgroud)
哪里m_tableWidget是QTableWidget *你与你的表格部件关联。
| 归档时间: |
|
| 查看次数: |
7154 次 |
| 最近记录: |