QErrorMessage持续出现



我计算了一些条目,当用户有很多条目时,我想发出一条消息,因为这会让人感到困惑。

然而,另一方面,用户应该有禁用此警告的选项。

这就是为什么我想使用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));
}

showError()在前面的if语句中被调用。

我解决了这个问题(在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与第一个相同)。

我无法重现您的问题。你应该做的是使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");
}

最新更新