9

我有

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;

我想

  1. 从创建 MyWidget 的新实例w
  2. 该实例将在之后QCloseEvent或之后被销毁w(现在它们仅在之后被销毁QCloseEvent);
  3. 该实例出现在新窗口中。

我正在创建MyWidget这样的新实例:

void MainWindow::visualize()
{
    MyWidget *widg = new MyWidget(this); // or widg = new MyWidget(0)
    widg->show();
    widg->raise();
    widg->activateWindow();
}

当我尝试widg使用was创建时parentwidg出现在w(左上角)的内部。

解决这个问题的最简单和最清晰的方法是什么?

谢谢!

4

2 回答 2

12
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

于 2011-03-06T15:20:17.443 回答
2

正如QWidget 的构造函数参考中写的那样,小部件成为窗口时,它的父级应该是 0。但是当父级为 0 时,它的父级是“你”:) - 即你必须照顾它们 - 让它们保持一些可到达的地方并在适当的时候销毁它们(在关闭事件、析构函数或使用共享指针时)。

于 2011-03-06T14:44:38.880 回答