1
はこのようなClickableLabel
ています:Qtは親ウィジェットを取得できません
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()
理由関数は012を返す。今、親ウィジェットにアクセスする方法がわからない。コンストラクタで親が0
にデフォルトで設定されていることがわかります。しかし、このデフォルトの親を削除すると、QLabelから継承することはできません。
私の質問は、どのように私はClickableLabelから親ウィジェットにアクセスできますか?
私はコンストラクタをeddited: '明示ClickableLabel(のconst QStringの&テキスト=「」);'それでも親 – nocturne
を得ることができないあなたはありません親をコンストラクタに渡すので、もちろんコンストラクタに親は存在しません。親は 'addWidget'によって設定されますが、もちろん、コンストラクタが返った後に発生します。 –
コンストラクタが完了した後にのみアクセスできます。 – nocturne