上次编辑的单元格的QTable行为如何

  • 本文关键字:单元格 编辑 QTable qt qt3
  • 更新时间 :
  • 英文 :


当我在QDialog内编辑QTable的单元格并按下QDialog的"确定"按钮时,该单元格的值为零(如果在编辑之前为零)。因此,在用于OkButton(即OkButton->clicked())的时隙中,我访问QTable中的每个小区的值。但是,最后编辑的单元格尚未填充。奇怪的

请注意,如果在按OkButton之前单击QTable中的其他位置,则效果良好,也就是说,我可以使用QTable->text(row, col)查看上次编辑的单元格的值。有人能帮助我理解导致这种行为的原因吗?

另一个有趣的行为:在OkButton的插槽中,由于找不到值,我调用QMessageBox::information()。在调试期间,当我对这个语句说"next"(在gdb中)时,就会发出valueChanged()信号(我正在捕捉它并打印)。我不明白为什么这个信号如此延迟;为什么QTable没有更早地记录更改后的值??

我没有可用的qt3,但我在Qt 4.6中遇到了类似的QTableView问题。

您可能需要调用函数endEdit(row,col,true,false):

void QTable::endEdit(int row,int col,bool accept,bool replace)[虚拟保护]

在对第行、第行的单元格进行就地编辑时调用此函数被请求停止。如果单元格未被编辑或接受FALSE,函数返回,单元格内容保持不变。

如果accept为TRUE,则编辑器的内容必须转移到相关单元格。如果替换为TRUE,则此单元格的当前内容应替换为编辑器的内容(这意味着删除单元格的当前QTableItem,并为细胞)。否则(如果可能的话)编辑器的内容应该设置为此单元格的现有QTableItem。

在我的情况下,我不得不调用commitData(),这似乎起到了同样的作用。

一种可能的解决方案是以某种方式触发endEdit()。我采用的方法是从OkButton的处理程序/插槽中获得以下代码。

mTable->setEnabled(false);  // wil trigger endEdit()
mTable->setEnabled(true);
// Access mTable's cells now
QString cell_content = mTable->text(i, j);

此代码确实解决了问题。

相关内容

  • 没有找到相关文章

最新更新