C++ 处理退出而不保存在Qt中

C++ 处理退出而不保存在Qt中,c++,qt,user-interface,exit,qdialog,C++,Qt,User Interface,Exit,Qdialog,我是一名学生程序员,使用Qt来构建和应用程序,我很难弄清楚当用户退出对话框而不保存更改时如何处理。该对话框主要用于数据输入,因此能够识别是否进行了更改,然后为用户提供退出前保存的选项将非常有用。我查看了一下,没有发现任何与按下退出按钮返回的模式有关的内容。首先,要有一种方法来识别单击退出按钮的时间。此外,作为一名学生程序员,我也愿意接受关于如何比较前后数据的最佳实践的任何想法。数据被输入到一个表中,所以我猜我必须这样做 connect(some kinda exit handler, SIGNA

我是一名学生程序员,使用Qt来构建和应用程序,我很难弄清楚当用户退出对话框而不保存更改时如何处理。该对话框主要用于数据输入,因此能够识别是否进行了更改,然后为用户提供退出前保存的选项将非常有用。我查看了一下,没有发现任何与按下退出按钮返回的模式有关的内容。首先,要有一种方法来识别单击退出按钮的时间。此外,作为一名学生程序员,我也愿意接受关于如何比较前后数据的最佳实践的任何想法。数据被输入到一个表中,所以我猜我必须这样做

connect(some kinda exit handler, SIGNAL(clicked), this, SLOT(comparePreAndPostTable)

QVector<QString> prechanges =  everything from the table
QVector<QString> postchanges = everything from table when exit is clicked


if(prechanges != postchanges)
{
     Give oppertunity to save
}
感谢您的帮助!如果Qt已经有了这方面的东西,那就太好了

您需要重写的closeEvent方法来处理对话框的退出按钮。文档中甚至给出了一个与您所要查找的内容非常相似的示例:

 void MainWindow::closeEvent(QCloseEvent *event)
 {
     if (maybeSave()) {
         writeSettings();
         event->accept();
     } else {
         event->ignore();
     }
 }
maybeSave将在其中进行比较,以查看是否有任何更改。

您需要重写的closeEvent方法来处理对话框的退出按钮。文档中甚至给出了一个与您所要查找的内容非常相似的示例:

 void MainWindow::closeEvent(QCloseEvent *event)
 {
     if (maybeSave()) {
         writeSettings();
         event->accept();
     } else {
         event->ignore();
     }
 }

maybeSave将在何处进行比较,以查看是否有任何变化。

除了Talnocolas所说的,我建议尝试QWidget::setWindowModified和QWidget::isWindowModified。您可以在用户对文档执行操作时将属性设置为true,并在close方法中检查该属性是否为true。这还可以将方便的星号至少放在标题栏的Windows中,以便用户可以查看文档是否已编辑。除了talnicolas所说的,我建议尝试QWidget::setWindowModified和QWidget::isWindowModified。您可以在用户对文档执行操作时将属性设置为true,并在close方法中检查该属性是否为true。这还可以将方便的星号至少放在标题栏的窗口中,以便用户可以查看文档是否已编辑。