c++ - Qt - 无法获取父小部件

标签 c++ qt

ClickableLabel 像这样:

gui.h

class ClickableLabel : public QLabel
{
    Q_OBJECT
public:
    explicit ClickableLabel(Card card,const QString& text="", QWidget* parent=0);
    ~ClickableLabel();
signals:
    void clicked(const QString &text);

protected:

private:
    QSignalMapper *signalMapper;
};

gui.cpp

ClickableLabel::ClickableLabel(Card card,const QString& text,QWidget* parent) : QLabel(parent)
{
    QWidget *w = this->parentWidget();
    Q_ASSERT(w);
}

文件 main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    gui w;

    QList<QVBoxLayout*> layouts = w.findChildren<QVBoxLayout*>();
    layouts[0]->addWidget(new ClickableLabel("myLabel"));

    w.show();
    return a.exec();
}

此应用在 Q_ASSERT 上不断中断,因为 parentWidget() 函数返回 0。现在我不明白如何访问父窗口小部件。我看到在构造函数中,父级默认设置为 0。但是当我删除这个默认父级时,我将无法从 QLabel 继承。

所以我的问题是,如何从 ClickableLabel 访问父窗口小部件?

最佳答案

QWidget 的父级在构造期间(不是您的情况)或在将其添加到另一个小部件的对象树时分配。 将其添加到布局后,您将拥有父小部件:

auto label = new ClickableLabel("myLabel");
qDebug() << label->parentWidget();
layouts[0]->addWidget(label); // added here as a child of another widget
qDebug() << label->parentWidget();

关于c++ - Qt - 无法获取父小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43831467/

相关文章:

c++ - 从 C++ 到 Haskell 类和状态

c++ - SFML 的 'intersects' 函数总是返回 'true'

c++ - 静态链接ActiveMQ-cpp

qt - QPushButton 和快捷方式

c++ - 无法显示 OpenGL 纹理

c++ - 使用 std::initializer_list 构造函数而不产生歧义?

c++ - 将数据存储在另一个类的 vector 中

mysql - 它显示已连接,但插入语句不起作用。错误参数计数不匹配

c++ - 在 C++ 中创建和显示十六进制字符串

c++ - 使用 QStandardItem 传输自定义数据 (Type*) 时内存泄漏?