我在Qt中有一个应用程序,当用户没有保存他们的文档时,它将覆盖关闭。它看起来像这样:QtSingleApplication QMessageBox是,即使没有被选择,也会采取行动
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
)
原来是恶意软件。我们为用户创建了一个新的配置文件,一切都重新运行。感谢大家的全力帮助,但看起来这毕竟不是一个编程问题。 – jjacksonRIAB 2010-09-02 07:51:12
请*请*使用'QMessageBox'类提供的枚举而不是0和1,它将为您节省大量头痛! – Ivo 2010-09-02 14:22:53