我有
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget (QWidget *parent);
// ...
};
// here is ALL the code in MyWidget constructor
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
glWidget = new GLWidget(this, cluster);
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(glWidget);
setLayout(mainLayout);
setWindowTitle("Visualization");
}
和主窗口MainWindow w;
。
我想要
w
; QCloseEvent
或w
之后销毁的实例(现在它们仅在QCloseEvent
之后销毁); 我正在创建MyWidget
的新实例:
void MainWindow::visualize()
{
MyWidget *widg = new MyWidget(this); // or widg = new MyWidget(0)
widg->show();
widg->raise();
widg->activateWindow();
}
当我尝试使用widg
作为w
创建parent
时,widg
会出现在w
内(左上角)。
解决这个问题的最简单,最明确的方法是什么?
谢谢!
答案 0 :(得分:11)
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent, Qt::Window)
{
glWidget = new GLWidget(this, cluster);
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(glWidget);
setLayout(mainLayout);
setWindowTitle("Visualization");
}
将Qt::Window
添加到QWidget
的构造函数中应该可以执行您想要的操作。
答案 1 :(得分:2)
因为在QWidget's constructor reference中写入一个小部件成为一个窗口,它的父级应该为0.但是当父级为0时,父级是“你”:) - 即你必须照顾它们 - 将它们保存到某个可到达的位置并在适当的时候销毁它们(在关闭事件,析构函数或使用共享指针时)。