2016-08-24 6 views
0

In meinem Programm habe ich das folgende Problem: Nachdem ich eine QDialog von QMainWindow geöffnet habe, kann ich die QMainWindow nicht verwenden, nur wenn ich zuerst die QDialog schließe. Gibt es dafür eine Lösung?QMainWindow kann nicht nach dem Öffnen eines QDialog (Qt)

Danke,

Mate-

+1

Können Sie Code bereitstellen? –

+1

Sie benötigen wahrscheinlich einen nicht-modalen (Qdialog). – Holt

+0

void MainWindow :: on_action_sszes_Mez_rt_k_triggered() { Felder von DialogFields; fields.adatokFogad ((ui-> listType-> currentRow() + 1), (ui-> listGroup-> currentRow()), (ui-> tableWidgetField-> currentRow() + 1), (ui-> actionRemi_mod -> isChecked())); fields.setModal (wahr); fields.exec(); } Ich vermute das Problem ist, dass ich exec() anstelle von show() benutze. Aber wenn ich versuche, show() zu verwenden, öffnet es einfach meinen Dialog und schließt es sofort. – Mat

Antwort

1

Wenn Sie die Ereignisschleife von exec nicht benötigen Sie Dialog- verwenden können> show().

1

Ihr Problem ist, dass Sie Ihren Dialog auf dem Stapel erstellen. Deshalb wird der Dialog nach on_action_sszes_Mez_rt_k_triggered() beendet. Sie müssen Ihr Dialogfeld auf dem Heap erstellen:

#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(); 
} 
Verwandte Themen