如何以编程方式从QTableWidget提交数据,其中包含一些处于编辑状态的项?

如何以编程方式从QTableWidget提交数据,其中包含一些处于编辑状态的项?,qt,Qt,当我发出一些命令时,如何从处于编辑状态的QTableWidget自动提交数据 假设其中有一些网格和数据(触发QComboBox编辑器的可编辑委托)。所以,一个人开始在组合中选择选项,但没有完成编辑,然后点击一些按钮,执行操作,使用该组合中的数据,但新选项尚未提交:\ 如何以编程方式完成表中的编辑 我指的是一些不严格的“循环所有项目和完成编辑”的方式,我认为这是不好的和丑陋的。 哎呀:工作太多了,所以,我还没有意识到,一次可能只有一个待处理的编辑器。问题还在这里。在tableWidget中有一个名

当我发出一些命令时,如何从处于编辑状态的QTableWidget自动提交数据

假设其中有一些网格和数据(触发QComboBox编辑器的可编辑委托)。所以,一个人开始在组合中选择选项,但没有完成编辑,然后点击一些按钮,执行操作,使用该组合中的数据,但新选项尚未提交:\

如何以编程方式完成表中的编辑

我指的是一些不严格的“循环所有项目和完成编辑”的方式,我认为这是不好的和丑陋的。


哎呀:工作太多了,所以,我还没有意识到,一次可能只有一个待处理的编辑器。问题还在这里。

在tableWidget中有一个名为“commitData”的受保护插槽。您可以从tableWidget继承,然后添加您自己的公共方法(或插槽)并从那里发送信号(或简单地调用commitData方法)。 有一个问题。您需要提供编辑器对象,但tableWidget无法获取所需的指针。
如果您使用自己的createEditor方法,则可以将指向编辑器的指针保存在某个地方,您的方法可以在那里获取它。这是一种攻击,但这是我知道的唯一方法。

当前编辑器似乎无法从视图外部访问,但其内容在当前模型索引更改时提交。因此,强制提交的一个简单方法似乎是调用

表->setCurrentIndex(QModelIndex())


另外,如果小部件还没有被丢弃,还可以在以后恢复您以前的当前索引。

这是一个很老的问题,但它在Google上的排名仍然很高,所以为了防止其他人需要答案,QTableView有一个受保护的方法

void currentChanged(const QModelIndex &current, const QModelIndex &previous)

这会导致提交数据,并且QTableWidget构建在QTableView上,因此仍然可以工作。我在网上找到了这些信息。

是的,这也是我唯一知道的方法,而且有点骇客。但是,似乎没有其他方式存在(