2012-04-13 49 views
6

ボタンのクリックイベントで既存のダイアログから新しいダイアログウィンドウを開こうとしていますが、MainWindowからダイアログウィンドウを開いたときにこれを行うことができません。私がしようとしていますQtのダイアログから新しいダイアログを開く

Dialog1 *New = new Dialog1(); 

New->show(); 

は、ダイアログウィンドウのフォームに既存のダイアログウィンドウを開くの異なる方法はあります?

+0

前のダイアログ-this->非表示を非表示にすることを忘れないでください (); –

答えて

8

あなたのコードがよかったので、他にも問題があるはずです。ちなみに

#include <QtGui> 

class Dialog : public QDialog 
{ 
public: 
    Dialog() 
    { 
     QDialog *subDialog = new QDialog; 
     subDialog->setWindowTitle("Sub Dialog"); 
     QPushButton *button = new QPushButton("Push to open new dialog", this); 
     connect(button, SIGNAL(clicked()), subDialog, SLOT(show())); 
    } 
}; 

class MainWindow : public QMainWindow 
{ 
public: 
    MainWindow() 
    { 
     Dialog *dialog = new Dialog; 
     dialog->setWindowTitle("Dialog"); 
     dialog->show(); 
    } 
}; 

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

    MainWindow w; 
    w.setWindowTitle("Main Window"); 
    w.show(); 

    return a.exec(); 
} 

、私はのQPushButtonのQDialogの「ショー」のスロットに信号を「クリック」接続しているかに注意してください:ここで私はそれを行うだろう方法です。とても便利な。

1

私はQTが新しく、私も同様の問題がありました。私の場合は、メインダイアログの関数から新しいダイアログを呼び出していました。私は新しいダイアログの結果まで待たずにdlg->showを使っていました。したがって、プログラムはまだ実行中です。 dlg->showdlg->execに変更すると、ダイアログが表示されます。あなたのコードでは、ダイアログはローカル変数のようですが、おそらく同じ問題があります。他のオプションは、代わりに静的ポインタを使用することです。 mainwindow.hファイル内

Dialog1 *newDlg = new Dialog1(); 
this->hide(); 
int result = newDlg->exec(); 
this->show(); 
delete newDlg; 
0

あなたの新しいダイアログ へのポインタを宣言し、

#include <myNewDialog.h> 

private: 
    Ui::MainWindow *ui; 
    MyNewDialog *objMyNewDialog; 

のような新しいdialog.hが含まれており、その後、あなたはにアップ示されなければ、あなたのダイアログを呼び出すことができなければなりませんmainwindow.cpp よう

void MainWindow::on_btnClose_clicked() 
{  
    objMyNewDialog= new MyNewDialog(this); 
    objMyNewDialog->show(); 
} 
関連する問題