如何在 Qt 中为文本编辑程序实现 "Do you want to save changes?" 对话框?
How to implement "Do you want to save changes?" dialog for a text editing program in Qt?
我用Qt框架用C++写了一个类似记事本的文本编辑程序。它只有基本功能,如撤消、重做等。我想显示一个对话框,如果用户没有保存他的更改,它会出现,并询问 he/she 是否想要保存类似于记事本中的更改和其他此类程序。我该如何处理?
你可以这样做:
Document unsaveDocument = getUnsaveDocument();
if (unsaveDocument.isModified()) {
QMessageBox *alert = new QMessageBox;
alert->setWindowTitle("File is modified");
alert->setText("Do you want to save your changes?");
alert->setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
alert->setDefaultButton(QMessageBox::Save);
int ret = alert->exec();
alert->deleteLater();
if (ret == QMessageBox::Save) {
saveDocument();
} else {
doSomeThing(); //When discard or cancel
}
}
Qt 的 documentation for QMessageBox 对此进行了讨论并提供了以下示例:-
QMessageBox msgBox;
msgBox.setText("The document has been modified.");
msgBox.setInformativeText("Do you want to save your changes?");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Save:
// Save was clicked
break;
case QMessageBox::Discard:
// Don't Save was clicked
break;
case QMessageBox::Cancel:
// Cancel was clicked
break;
default:
// should never be reached
break;
}
应用程序可以通过 aboutToQuit 信号监控何时要退出,这是您将提示用户的地方。
例如(with C++ 11)
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MainWindow w;
// Note Qt 5 connect syntax with C++ 11 lambda function
QObject::connect(qApp, &QCoreApplication::aboutToQuit, [&w](){
qDebug() << "Terminating - Goodbye!\n";
//Display msg prompt here
if(QMessageBox::question(NULL, "Test", "Save?", QMessageBox::Yes|QMessageBox::No) == QMessageBox::Yes)
{
// if result is save...
w.save();
}
});
w.show();
return a.exec();
}
我用Qt框架用C++写了一个类似记事本的文本编辑程序。它只有基本功能,如撤消、重做等。我想显示一个对话框,如果用户没有保存他的更改,它会出现,并询问 he/she 是否想要保存类似于记事本中的更改和其他此类程序。我该如何处理?
你可以这样做:
Document unsaveDocument = getUnsaveDocument();
if (unsaveDocument.isModified()) {
QMessageBox *alert = new QMessageBox;
alert->setWindowTitle("File is modified");
alert->setText("Do you want to save your changes?");
alert->setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
alert->setDefaultButton(QMessageBox::Save);
int ret = alert->exec();
alert->deleteLater();
if (ret == QMessageBox::Save) {
saveDocument();
} else {
doSomeThing(); //When discard or cancel
}
}
Qt 的 documentation for QMessageBox 对此进行了讨论并提供了以下示例:-
QMessageBox msgBox;
msgBox.setText("The document has been modified.");
msgBox.setInformativeText("Do you want to save your changes?");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Save:
// Save was clicked
break;
case QMessageBox::Discard:
// Don't Save was clicked
break;
case QMessageBox::Cancel:
// Cancel was clicked
break;
default:
// should never be reached
break;
}
应用程序可以通过 aboutToQuit 信号监控何时要退出,这是您将提示用户的地方。
例如(with C++ 11)
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MainWindow w;
// Note Qt 5 connect syntax with C++ 11 lambda function
QObject::connect(qApp, &QCoreApplication::aboutToQuit, [&w](){
qDebug() << "Terminating - Goodbye!\n";
//Display msg prompt here
if(QMessageBox::question(NULL, "Test", "Save?", QMessageBox::Yes|QMessageBox::No) == QMessageBox::Yes)
{
// if result is save...
w.save();
}
});
w.show();
return a.exec();
}