c++ - 从其单元格小部件项中检索父 QTableWidget

标签 c++ qt qtablewidget qcombobox

我正在开发一个使用 Qt 5.7 和 C++ 的项目。我陷入了一个奇怪的问题。

我有一个 QTableWidget,它在其唯一的单元格上包含一个 QComboBox。简化代码如下。

QTableWidget *tab = new QTableWidget();
tab->insertColumn(0);
tab->insertRow(0);
QComboBox *cb = new QComboBox(tab);
cb->addItem("A");
cb->addItem("B");
tab->setCellWidget(0, 0, cb);

现在在 QComboBoxcurrentIndexChanged(int) 信号上,我正在连接到一个 SLOT,我试图在其中检索指针QTableWidget如下,

QComboBox* cb = qobject_cast<QComboBox*>(sender());
QWidget* par = cb->parentWidget();

但是,我没有得到与实际 QTableWidget 相同的指针。

我也试过如下,还是失败了。

QComboBox* cb = qobject_cast<QComboBox*>(sender());
QObject *par = cb->parent();
QTableWidget *tab = qobject_cast<QTableWidget *>(par);

任何人都可以建议一些其他方法来做到这一点或指出那些代码段中的错误吗?

找到可能的解决方案

可以使用 cb->parent()->parent() 检索父 Widget。尽管没有记录此过程,因此不可靠。

最佳答案

原因是QTableWidget不是QComboBox的直接父级,而是祖父级。但即使这是一个实现细节,也不能依赖,因为它没有记录。

一种解决方法是将 QTableWidget 指针存储在其他地方。

关于c++ - 从其单元格小部件项中检索父 QTableWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42094406/

相关文章:

c++ - 为什么字符串有时朝一个方向写,有时朝另一个方向写?

qt - QSettings-ini文件的位置在哪里?

c++ - 在 ARM 上使用 Qt 的简单程序中的段错误

c++ - QTableWidget信号(cellChanged)上的无限循环

ruby - Qt ruby : Creating the table and entering the data from text file dynamically

c++ - 完美转发const ref扣减错误

C++ 似乎将我的十六进制无关紧要的零变成了 Fs

c++ - 调试断言失败。表达式映射迭代器不可取消引用

ios - 如何为 iOS 编译 Qt 的 MySQL 驱动程序

c++ - 更改 QHeaderView 数据