【问题标题】:QMainWindow closes right after show()QMainWindow 在 show() 之后立即关闭
【发布时间】:2016-04-29 17:58:23
【问题描述】:

我是 Qt 新手(主要使用 Objective-C),所以我可能会遇到菜鸟问题。从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
}

【问题讨论】:

  • 我希望当对话框关闭时问题出在对话框应用程序中,应用程序也是如此。此外,您的窗口是一个局部变量,当范围结束时将不再存在。

标签: c++ qt qt5


【解决方案1】:

您的窗口是一个局部变量,它在函数结束时被销毁,因此析构函数将其关闭。 您可以做的是使用new SQLWindow 在堆上创建SQLWindow,例如使用Qt::WA_DeleteOnClose 属性,如here 所示。

另外,更好的设计可能是将对话框和窗口都创建为main 函数的局部变量,并让主函数将对话框中的路径传递给SQLWindow,那么您不需要@987654327 @。

【讨论】:

  • 你的回答听起来非常合乎逻辑和有用,但我需要时间来检查它是否有效(因为我不太擅长 Qt):P
  • 是的,就是这样。非常感谢您的回答:3
猜你喜欢
  • 1970-01-01
  • 2018-02-23
  • 2017-09-26
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多