0

別のウィンドウを呼び出すQtメインウィンドウがあります。実際には、最初のウィンドウのパラメーターを含む一種のサブメニューです。以下は、このメイン ウィンドウの一部です。

void Ui_MainWindow::createSignals()
{ 
  connect(actionDisk_galaxy, SIGNAL(triggered()), this,  SLOT(ICMenu()));
}

void Ui_MainWindow::ICMenu()
{
qmenu = new QMainWindow;
DiskMenu = new Ui_DiskGalMenu;
DiskMenu->setupUi(qmenu,this);
setInitialDiskMenuPosition(qmenu, this);
qmenu->show();
}

ご覧のとおり、別の QMainwindow (" qmenu") を呼び出します。この新しいウィンドウのコードは次のとおりです (タイプは " Ui_DiskGalMenu"):

void Ui_DiskGalMenu::createMenuSignals()
{
  connect(pushButton_4, SIGNAL(clicked()), this, SLOT(closeMenu()));       
}

void Ui_DiskGalMenu::closeMenu()
{  
close(true);
} 

このサブメニューでパラメータを設定した後、プッシュ ボタン (ここでは " ") で閉じたいと思いますpushButton_4

私の問題は、「pushButton_4」をクリックしても、このウィンドウが閉じないことです。

私も再実装しようとしましcloseEventたが、成功しませんでした。

どんな助けでも素晴らしいでしょう

4

1 に答える 1

0

この関数呼び出しは間違いのように見えます:

close(true);

QWidget :: close()はパラメーターを取りません。したがって、ここで行っているのは、Cライブラリのclose(int)関数(ファイル記述子を閉じるため)を呼び出すことです。これboolは暗黙的にに変換されるintため、次の呼び出しになります。

::close(1);

これは(おそらく)閉じていstderrます。

上記を次のように変更すると、何が起こっているかを確認できます。

this->close(true);

そのような関数は存在しないため、コンパイルエラーが発生するはずです。したがって、正しい呼び出しは次のようになります。

this->close();

ただし、QWidget :: close()はすでにスロットであるため、Ui_DiskGalMenu :: closeMenu()関数はまったく必要ありません。必要なのは、まずclose()スロットに接続することだけです。

connect(actionDisk_galaxy, SIGNAL(triggered()), this, SLOT(close()));

ウィンドウが閉じたときにさらに多くのことを行う必要がある場合は、ウィンドウが閉じる前に呼び出されるcloseEvent()をオーバーライドできます。

于 2012-12-22T07:45:05.353 に答える