【问题标题】:Retrieving parent QTableWidget from its cell widget item从其单元格小部件项中检索父 QTableWidget
【发布时间】:2017-02-07 15:59:42
【问题描述】:

我正在使用 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-&gt;parent()-&gt;parent() 检索父窗口小部件。虽然,这个过程没有记录,所以,不可靠。

【问题讨论】:

    标签: c++ qt qtablewidget qcombobox


    【解决方案1】:

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

    出路可能是将QTableWidget 指针存储在其他地方。

    【讨论】:

    • 在我的类中添加一个新的成员变量来存储指针,将是最后的出路。从指针中检索父级将是一个优雅的解决方案。你能推荐一些其他的解决方案吗?
    • 如果可以使用 C++11 或 C++14,请使用 lambda。操作方法如下:medium.com/genymobile/…。您可以捕获指向 QTabWidget 的指针,然后执行此工作。它也比SIGNAL()SLOT() 宏更安全。简而言之:它让生活变得如此轻松。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多