【问题标题】:Handling exit without saving in Qt在 Qt 中处理退出而不保存
【发布时间】:2012-05-12 04:09:29
【问题描述】:

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

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 已经为此提供了一些东西,那就太好了!

【问题讨论】:

  • 除了 talnicolas 所说的,我建议尝试使用 QWidget::setWindowModified()QWidget::isWindowModified()。每当用户对文档执行某些操作时,您都可以将该属性设置为 true,并在 close 方法中检查它是否为 true。这也可以将那个方便的星号(至少在 Windows 中)放在标题栏中,以便用户可以查看文档是否已被编辑。

标签: c++ qt user-interface exit qdialog


【解决方案1】:

您需要覆盖QWidgetcloseEvent() 方法来处理对话框的退出按钮。该文档甚至给出了一个看起来很奇怪的示例:

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

maybeSave() 会比较哪里,看看是否有任何变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 2015-04-23
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2015-03-19
    • 1970-01-01
    相关资源
    最近更新 更多