2016-04-29 112 views
0

我是新來的Qt(主要使用Objective-C),所以我堅持可能noob問題。從QDialog窗口,我嘗試打開QMainWindow這樣的:QMainWindow關閉後顯示()

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

QDialog關閉和毫秒我看到一個新的窗口的一瞥,但它關閉了。下面是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

你的窗口是一個局部變量,在函數的末尾被破壞,因此析構函數關閉它。 你可以做的是在new SQLWindow的堆上創建SQLWindow,例如使用Qt::WA_DeleteOnClose屬性,如here所示。

或者,更好的設計可能是創建對話框和窗口作爲main函數的局部變量,並讓主函數通過從對話框到SQLWindow的路徑,那麼您不需要new

+0

你的答案聽起來非常符合邏輯和有用,但我需要時間檢查它是否有效(因爲我對Qt並不擅長):P – Edward

+0

是的,就是這樣。非常感謝您的回答:3 – Edward