我计算了一些条目,并希望在用户有很多条目时发出消息,因为它会让人感到困惑。
然而另一方面,用户应该可以选择禁用此警告。
这就是为什么我想使用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()
。
答案 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}}相同。