从其单元格小部件项中检索父 QTableWidget
Retrieving parent QTableWidget from its cell widget item
我正在开发一个使用 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);
现在,在 QComboBox
的 currentIndexChanged(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()
检索父控件。尽管没有记录此过程,因此不可靠。
原因是 QTableWidget
不是 QComboBox
的直系父代,而是祖父代。但即使这是一个实现细节,也不能依赖,因为它没有记录。
一个出路可能是将 QTableWidget
指针存储在其他地方。
我正在开发一个使用 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);
现在,在 QComboBox
的 currentIndexChanged(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()
检索父控件。尽管没有记录此过程,因此不可靠。
原因是 QTableWidget
不是 QComboBox
的直系父代,而是祖父代。但即使这是一个实现细节,也不能依赖,因为它没有记录。
一个出路可能是将 QTableWidget
指针存储在其他地方。