2

少し質問があります - ボタン付きの QMainWindow があります。そのボタンをクリックすると、既存の QMainWindow が開きます (詳細: QWT Plot でウィンドウを開きたいです。QWt の refreshtest プロジェクトの例を意味します)。

したがって、既存のウィンドウをボタンで開きたいと思います。新しい QMainWindow を開くことができた限りですが、プロジェクトの refreshtest から MainWindow を表示するにはどうすればよいですか?

void  MyWindow::on_pushButton_1_clicked ()
{
  QMainWindow *mw = new QMainWindow();
  mw->show();
}
4

1 に答える 1

2

このコードでは、メソッドのスコープを離れた後にリーク ポインターを取得します。

その理由は、show() メソッドがブロックされていないためです。イベントをイベント ループ キューにポストします。Qtイベントループが「その容量を取得する」たびに、非同期で処理されます。

この問題に対処するには、いくつかのオプションがあります。

1) Qtの親子関係

QMainWindow *mw = new QMainWindow(this);
                                  ^^^^

2) "mw" を MyWindow のクラスメンバーにする

m_mw.show();

MyWindow コンストラクターでそれを構築します。

3) スマート ポインターを使用する

QSharedPointer<QMainWindow> mw = QSharedPointer<QMainWindow>(new QMainWindow());
于 2014-01-14T19:59:42.490 に答える