2010-08-31 75 views
0

我在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 
) 
+0

原来是恶意软件。我们为用户创建了一个新的配置文件,一切都重新运行。感谢大家的全力帮助,但看起来这毕竟不是一个编程问题。 – jjacksonRIAB 2010-09-02 07:51:12

+0

请*请*使用'QMessageBox'类提供的枚举而不是0和1,它将为您节省大量头痛! – Ivo 2010-09-02 14:22:53

回答

0

问题原来是恶意软件安装在用户的个人资料。

0

有一个快速查看文档在TrollTech它在我看来,没有返回0。他们的例子是使用你没有使用的exec()函数调用,但我猜想返回值保持不变。

另一件让人想到的事情是,如果您只是使用窗口上的关闭按钮关闭对话框会发生什么?

+0

如果我点击关闭按钮,似乎仍然可以正常工作...我没有看到那里的枚举,我会尝试它们,因为反正它更清晰。谢谢。 – jjacksonRIAB 2010-08-31 21:03:12

0

QMessageBox::warning()的返回值是enum QMessageBox::StandardButton,因此您必须查找这些对话框以查看对话框是如何关闭的。

+0

我没有使用标准按钮。我为我打给我的帖子的警告的重载版本添加了一个定义。 我不使用button2Text,因此它是0,默认按钮是按钮0,退出按钮映射到按钮1,这是取消。 – jjacksonRIAB 2010-08-31 21:40:12

+0

好的。我现在看到您的编辑与定义。这个实现是做什么的? – 2010-08-31 21:50:03

+0

该实现大部分工作。这是一个拥有超过500名用户的应用程序。不幸的是,两个用户有一个问题,如果他们关闭它,要求他们保存,他们选择否,并且无论如何保存。但是,如果他们只是退出并且不关闭,它将运行相同的代码并且工作正常。 在这一点上,我怀疑这两个人有恶意软件,损坏的配置文件或某些类型的第三方应用程序,这些应用程序导致问题,因为我已经在他们的机器上以我自己的配置文件登录并且它可以正常工作。 – jjacksonRIAB 2010-08-31 22:30:43

相关问题