我正在使用在C++中使用Qt 5.7的项目。我陷入一个奇怪的问题。
我有一个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);
现在,在
currentIndexChanged(int)
的QComboBox
信号上,我连接到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
指针存储在其他位置。
关于c++ - 从其单元小部件项中检索父QTableWidget,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42094406/