我尝试从孩子那里访问父母。
Parent和Child类继承QWidget
让我们看看:
//parent.h
public:
child* h_child = nullptr; //pointer to child - now i can control child in parent methods
//method in parent.cpp
h_child = new child(); //show child window
h_child->show(); //show next window
和孩子
//child.cpp in child method
parent_class *sth = qobject_cast<parent_class*>(parentWidget());
if (sth == NULL){
QMessageBox::warning(this, "error !", "error!");
}
而且我看到了错误&#39;
parentWidget()
替换为this->parent()
。 //结果相同我尝试像这样运行子实例:
h_child = new child(this); //show child window
但是,当我尝试使用h_child->show()
时,显示的窗口已被打破&#39; (我在窗口中有窗口(父窗口中的子窗口,没有子窗口框架) - 看起来很难看)
那么如何访问父方法和变量呢?
答案 0 :(得分:1)
创建孩子之后,您是否将父级设置为parentWidget?通常,当您创建QWidget
时,您将父项传递给构造函数,但在您的代码中,我看到child()
构造函数没有任何参数。这就是parentWidget()
返回NULL
的原因,您只是不将它设置在任何地方。
答案 1 :(得分:1)
要设置窗口小部件的父级,您可以执行以下操作:
widget = new Widget( parent );
或者这个:
widget->setParent( parent );
当然,如果您尝试显示没有父级的窗口小部件,则会显示它们自己的窗口边框。
实现新窗口小部件时,您将“传播”父指针窗体构造函数:
class Widget : public QWidget
{
public:
Widget( QWidget* parent ) : QWidget( parent )
{ }
};
如果您忘记了此步骤,则基本Qt小部件不会注意到该分配,并且此小部件将没有有效的父级。
答案 2 :(得分:0)
正如其他人已经说过的那样,您需要在构造函数中设置子级的父级。
如果您将this
作为父级传递,并且之后窗口小部件/窗口看起来已损坏,则可能是布局问题。您的小部件是否有布局,是否将child
添加到parent
的布局?