簡體   English   中英

Qt - 無法獲取父窗口小部件

[英]Qt - Cannot get parent widget

讓我們像這樣的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_ASSERTQ_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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM