让我们拥有这样的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访问父部件?
发布于 2017-05-07 06:51:52
QWidget
的父级是在构造期间(不是在您的情况下)或者当它被添加到另一个小部件的对象树时分配的。将父小部件添加到布局之后:
auto label = new ClickableLabel("myLabel");
qDebug() << label->parentWidget();
layouts[0]->addWidget(label); // added here as a child of another widget
qDebug() << label->parentWidget();
https://stackoverflow.com/questions/43831467
复制相似问题