我是Qt的新手(主要使用Objective-C)所以我可能会遇到noob问题。在QDialog
窗口中,我尝试打开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 :(得分:2)
您的窗口是一个局部变量,它在函数末尾被销毁,因此析构函数将其关闭。
您可以做的是使用SQLWindow
在堆上创建new SQLWindow
,例如使用显示here的Qt::WA_DeleteOnClose
属性。
或者,更好的设计可能是创建对话框和窗口作为main
函数的局部变量,让主函数从对话框传递路径到SQLWindow
,然后你不需要new
。