0

メインウィンドウで使用する入力を取得するQdialogがあります。したがって、メインウィンドウよりも最初に表示される必要があります。

問題は、メインウィンドウが表示されないことです。これが私のmain.cppです

#include <QtGui/QApplication>

#include "planevolume.h"
#include "dialog.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    Dialog *dialog= new Dialog;
    dialog->show();

    planevolume mainwindow;

    bool dialogcheck = dialog->isHidden();

    if (dialogcheck==1)
    {
        mainwindow.show();
    }
    else
    {
    }

    return app.exec();
}

押すとqdialogが非表示になり、非表示にするとメインウィンドウが表示されるはずのプッシュボタンがあります。

これが私が使ったスロットです:

void Dialog::startplanevolume()
{
    if (xMax==0 || yMax==0 || zMax==0 || xMMax==0 || yMMax==0 || zMMax==0)
    {
        ui->label_17->setText("Error: Can't start, invalid measures");
    }
    else
    {
        hide();
    }
}

メインウィンドウは、そのボタンがクリックされた後にのみ開始できます。その場合にのみ、メインウィンドウへの入力があります。

4

3 に答える 3

1

ボタンを押すと、あなたはあなたの を呼び出しますDialog::startplanevolume、はい、しかしそれだけです。メインループには戻りません。

を表示したい場合は、 の直後にmainwindowを呼び出すことができplanevolume.show()ます。Dialog::startplanevolumehide

ただし、オブジェクトが別のファイルにある場合は注意が必要です。したがって、 のようなシグナルを定義し、DialogCheckedこのシグナルを(もちろん のDialog::startplanevolume後に)送信し、 を受信したときに呼び出されるように変更することができます。hidemainmainwindow.setVisible(1)DialogChecked

于 2012-08-29T16:54:07.613 に答える
1

したがって、ここでの問題は、dialog->show() を呼び出しても実行がブロックされないことです。呼び出しが行われた分、次のメソッドに移動します。ユーザーが入力を終了するまで実行をブロックする必要があります。

メインを次のようにします。

QApplication app(argc, argv);

Dialog *dialog= new Dialog;
if ( dialog->exec() ) {
    planevolume mainwindow;
    mainwindow.show();
    return app.exec();
}
return 0;

そして、ダイアログ クラスで、メソッドを次のようにします。

void Dialog::startplanevolume() 
{
    if (xMax==0 || yMax==0 || zMax==0 || xMMax==0 || yMMax==0 || zMMax==0) 
    {
        ui->label_17->setText("Error: Can't start, invalid measures");
    }
    else 
    {
        this->accept();  // close the dialog with a result of 1
    }
}
于 2012-08-29T16:58:18.133 に答える
0

PushButtonアクションは、 が呼び出された後にのみ発生する可能性がありますapp.exec()。メイン ループに入る前にダイアログ プロパティをテストしても意味がありません。

コンポーネントを非同期で順次開始するように設定することで、期待どおりの動作が得られる場合があります。Qtの世界では、これはシグナルとスロットを使用することを意味します。

connect(dialog, SIGNAL(accept()), &mainwindow, SLOT(show()));
于 2012-08-29T19:32:55.840 に答える