[英]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_ASSERT
上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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.