2016-08-24 46 views
0

在我的計劃,我有以下問題:我從QMainWindow開了一個QDialog後,我無法使用QMainWindow,只有當我關閉QDialog第一。 有沒有解決方案?不能使用的QMainWindow後開了QDialog的(QT)

謝謝

伴侶

+1

你能提供一些代碼嗎? –

+1

您可能需要一個非[模式](http://doc.qt.io/qt-5/qdialog.html#modal-prop)'QDialog'。 – Holt

+0

void MainWindow :: on_action_sszes_Mez_rt_k_triggered() { DialogFields字段; (ui-> listType-> currentRow()+ 1),(ui-> listGroup-> currentRow()),(ui-> tableWidgetField-> currentRow()+ 1),(ui-> actionRemi_mod - >器isChecked())); fields.setModal(true); fields.exec(); } 我想問題是我使用exec()而不是show()。但是當我試圖使用show()時,它只是打開我的對話框,然後立即關閉它。 – Mat

回答

1

如果您不需要EXEC的事件循環,您可以使用對話框 - >顯示()。

1

你的問題是你在棧上創建對話框。這就是爲什麼你的對話在on_action_sszes_Mez_rt_k_triggered()完成後被刪除。你必須在堆上創建你的對話框:

#include <QMainWindow> 
#include <QScopedPointer> 
... 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

private: 
    Ui::MainWindow *ui; 
    QScopedPointer<DialogFields> fields_; 
}; 

... 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    field_.reset(new DialogFields()); 
} 

... 

void MainWindow::on_action_sszes_Mez_rt_k_triggered() 
{ 
    fields_->adatokFogad((ui->listType->currentRow()+1), 
    (ui->listG‌​roup->currentRow()),‌​ 
    (ui->tableWidgetFiel‌​d->currentRow()+1), 
    (‌​ui->actionRemi_mod->‌​isChecked())); 
    fields_->show(); 
}