QErrorMessage继续出现

时间:2014-06-05 11:48:32

标签: c++ qt checkbox qmessagebox

我计算了一些条目,并希望在用户有很多条目时发出消息,因为它会让人感到困惑。

然而另一方面,用户应该可以选择禁用此警告。

这就是为什么我想使用QErrorMessage

但是我的QErrorMessage一直出现,即使它不应该出现(/当未选中复选框时)。

这是我写的最短的代码:

void checkNumber(int const &n)
{
    if(n > CriticalNumber)
    {
        QErrorMessage msg(this);
        msg.showMessage("too much!");
    }
}

我忘了什么吗?

有趣的是,在您取消选中复选框后,在每次下一次通话中都会取消选中...

//编辑:

即使QErrorMessage是我班级的成员而且未在每次通话中初始化,也会发生此错误。

// edit2:

到目前为止,我很确定,只有在我使用QString::arg时才会出现此错误。我没有在示例代码中使用它,因为我认为这没有任何区别。所以这个例子应该是这样的:

void showError(int const &n, QErrorMessage *msg)
{
    msg->showMessage(tr("%1 is too big").arg(n));
}
在前面的if语句中调用

showError()

2 个答案:

答案 0 :(得分:0)

我无法重现你的问题。你应该使checkNumber成为一个类的成员,并为你的msg对象做同样的事情。

这是一个有效的例子:

<强> mainwinodw.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QErrorMessage>
#include <QTimer>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void showErrorMsg();

private:
    Ui::MainWindow *ui;
    QErrorMessage msg;
    QTimer timer;
};

#endif // MAINWINDOW_H

<强> mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(&timer, SIGNAL(timeout()), this, SLOT(showErrorMsg()));
    timer.start(3000); // we use a timer to show an error message
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::showErrorMsg()
{
    msg.showMessage("My message");
}

答案 1 :(得分:0)

我解决了这个问题(在edit2中指定)。

问题是,QErrorMessage会保存所有不应再次显示的QStrings

由于我的arg()几乎每次都会在每次更改QString时显示QErrorMessage

示例:

QErrorMessage msg(this);
showError(1, msg);
showError(2, msg);
showError(1, msg);

第一个showError(1, msg)将显示QErrorMessage。 如果您取消选中该复选框,系统会显示showError(2, msg)(因为会显示不同的QString),但不显示showError(1, msg)(因为显示的QString与第一个{{1}}相同。