2016-04-29 30 views
0

私はおそらくnoobの問題に悩まされているので、私はQt(Objective-Cをほとんど使用します)を初めて使っています。QMainWindowはshow()の直後に終了します

this->close(); 
SQLWindow window; 
window.receivePath(path); //Path for the .sqlite file 
window.show() 

QDialog閉じをし、ミリ秒のために私は、新しいウィンドウの片鱗を見たが、それはあまりにも閉じ:QDialog窓から私はこのようなQMainWindow開こう。以下はQMainWindow一部です:

SQLWindow::SQLWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::SQLWindow) 
{ 
    ui->setupUi(this); 
    this->initialSetup(); 
} 

SQLWindow::~SQLWindow() 
{ 
    delete ui; 
} 

void SQLWindow::initialSetup() 
{ 
    ui->tableView->setSortingEnabled(true); 
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); 
} 

void SQLWindow::receivePath(QString path) 
{ 
    this->openDatabase(path); 
} 

void SQLWindow::openDatabase(QString path) 
{ 
    //Opening database just fine 
} 
+0

ダイアログが閉じても問題がダイアログアプリケーションにあると予想します。また、ウィンドウはスコープが終了したときにもはや存在しないローカル変数です。 – drescherjm

答えて

2

あなたの窓は、それが関数の最後で破壊され、したがって、デストラクタはそれを閉じ、ローカル変数です。 ヒープ上にSQLWindowを作成するには、new SQLWindowとする必要があります。図のようにQt::WA_DeleteOnClose属性を使用します(here)。

また、main関数のローカル変数としてダイアログとウィンドウの両方を作成し、メイン関数がダイアログのパスをSQLWindowに渡すようにすると、より良い設計になる可能性があります。newは不要です。

+0

あなたの答えは非常に論理的で便利ですが、私はそれが動作するかどうかを確認する時間が必要です(Qtが本当にうまくいかないため):P – Edward

+0

はい、それです。本当にありがとうございました:3 – Edward

関連する問題