我在Qt中有一个应用程序,如果用户没有保存文档,它将覆盖关闭。它看起来像这样:
class MyApplication : public QtSingleApplication
{
public:
MyApplication(int argc, char *argv[]) : QtSingleApplication(argc, argv, true)
{
}
~MyApplication()
{
}
void commitData(QSessionManager &manager)
{
if(manager.allowsInteraction())
{
main->RequestShutdownOverride();
}
}
void SetMainWindow(MainWindow *m)
{
main = m;
}
MainWindow *main;
};
void MainWindow::RequestShutdownOverride()
{
if(myDocument->hasChanges() == true)
{
switch
(
QMessageBox::warning
(
NULL,
"Foobar",
"You are exiting without saving. Would you like to save?",
"Yes, save my document", "No, don't save my document",
0,
0,
1
)
)
{
case 0:
myDocument->save();
break;
case 1:
app->exit(0);
break;
}
}
}
问题是他们要关闭的几个用户,关闭被覆盖他们点击“否”并且它仍然保存文档。我已经尝试过对这段代码进行故障排除,我找不到任何明显的东西,更糟糕的是 - 如果我在他们的机器上创建了我自己的配置文件,它再次正常工作。
有什么代码方面我搞砸了,还是会有别的东西导致它?我试过切换Qt版本。这两个用户似乎唯一的共同点是他们都使用windows vista,但其他人使用vista并没有报告这个问题。有什么想法吗?
修改
我正在使用这个定义:
static int QMessageBox::warning
(
QWidget *parent,
const QString &title,
const QString &text,
const QString &button0Text,
const QString &button1Text = QString(),
const QString &button2Text = QString(),
int defaultButtonNumber = 0,
int escapeButtonNumber = -1
)
答案 0 :(得分:0)
快速查看TrollTech处的文档,我觉得0不会被返回。他们的例子是使用你没有使用的exec()
函数调用,但我猜两种返回值都保持不变。
如果您只是使用窗口上的关闭按钮关闭对话框,会发生什么?
答案 1 :(得分:0)
QMessageBox::warning()
的返回值为enum QMessageBox::StandardButton,因此您必须查找那些以查看对话框是如何关闭的。
答案 2 :(得分:0)
问题原来是用户个人资料上安装了恶意软件。