QtSingleApplication QMessageBox即使没有选择,也会执行操作

时间:2010-08-31 20:47:37

标签: qt4

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

3 个答案:

答案 0 :(得分:0)

快速查看TrollTech处的文档,我觉得0不会被返回。他们的例子是使用你没有使用的exec()函数调用,但我猜两种返回值都保持不变。

如果您只是使用窗口上的关闭按钮关闭对话框,会发生什么?

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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