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と、 の内側(左上隅)に表示されます。wparentwidgw

それを修正する最も簡単で明確な方法は何ですか?

ありがとう!

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 に答える