【发布时间】:2017-05-07 22:51:52
【问题描述】:
让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();
}
因为parentWidget() 函数返回0,所以此应用程序不断在Q_ASSERT 上中断。现在我不明白如何访问父小部件。我看到在构造函数中,父级默认设置为0。但是当我删除这个默认父级时,我将无法从 QLabel 继承。
所以我的问题是,如何从 ClickableLabel 访问父小部件?
【问题讨论】:
-
我将构造函数编辑为:
explicit ClickableLabel(const QString& text="");但仍然无法获取父级 -
您没有将父级传递给构造函数,因此构造函数中当然没有父级。父级将由
addWidget设置 - 当然,这发生在构造函数返回之后。 -
所以我只能在构造函数完成它的工作后才能访问它,谢谢