Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QErrorMessage不断出现_C++_Qt_Checkbox_Qmessagebox - Fatal编程技术网

C++ QErrorMessage不断出现

C++ QErrorMessage不断出现,c++,qt,checkbox,qmessagebox,C++,Qt,Checkbox,Qmessagebox,我计算了一些条目,希望在用户有很多条目时发出一条消息,因为这会让人困惑 然而,另一方面,用户应该可以选择禁用此警告 这就是为什么我想使用QErrorMessage 但是我的QErrorMessage即使在不应该出现的时候也会继续出现(/当复选框未选中时) 这是我写的最短的代码: void checkNumber(int const &n) { if(n > CriticalNumber) { QErrorMessage msg(this);

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

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

这就是为什么我想使用
QErrorMessage

但是我的
QErrorMessage
即使在不应该出现的时候也会继续出现(/当复选框未选中时)

这是我写的最短的代码:

void checkNumber(int const &n)
{
    if(n > CriticalNumber)
    {
        QErrorMessage msg(this);
        msg.showMessage("too much!");
    }
}
我忘了什么吗

有趣的是,在您取消选中复选框后,它将在下一次调用中取消选中

//编辑:

即使
QErrorMessage
是我的类的成员并且不是在每次调用中初始化,也会发生此错误

//编辑2:

到目前为止,我非常确定,只有在使用
QString::arg
时,才会发生此错误。我没有在示例代码中使用它,因为我认为这没有什么区别。因此,示例应如下所示:

void showError(int const &n, QErrorMessage *msg)
{
    msg->showMessage(tr("%1 is too big").arg(n));
}

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

我无法重现您的问题。您应该将
checkNumber
设置为类的成员,并对
msg
对象执行相同的操作

以下是一个工作示例:

mainwinodw.h

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

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

由于my
arg()
几乎每次创建新的
QString
时都会创建,因此每次更改
QErrorMessage
时都会显示它

例如:

QErrorMessage msg(this);
showError(1, msg);
showError(2, msg);
showError(1, msg);
第一个
淋浴错误(1,msg)
将显示QErrorMessage。
如果取消选中该复选框,
showError(2,msg)
将显示(因为会显示不同的
QString
),但不会显示
showError(1,msg)
(由于显示的
QString
与第一个相同。

在您的代码片段中,您的
msg
对象一旦超出范围就会被销毁。它应该在屏幕上闪烁。您确定有足够的时间取消选中复选框吗?除此之外,我无法重现您的问题。可能会有所帮助。
QErrorMessage
会一直显示在屏幕上,直到我单击“确定”。正如我所写的,下次出现时,复选框将被取消选中这不是应该发生的事情,至少不会出现在您提供的代码段中。会立即返回。如果它一直显示在屏幕上,那么您必须在某处调用
QDialog::exec
。我只是还原了所有文件并再次测试了此示例。现在,正如您所说,
QErrorMessage
正在闪烁。现在,如果您将
checkNumber
设置为类的成员,并对
msg
执行相同的操作,当您取消选中复选框时,它是否仍会显示?我刚刚尝试了一个快速测试,但遇到了一些库链接问题。我会让您知道,当它工作时或者解决这个问题。但是我让``msg`和checkNumber()都是成员。到目前为止,谢谢!你也可以按类型筛选邮件。请参阅。这对你来说似乎很理想。
#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");
}
QErrorMessage msg(this);
showError(1, msg);
showError(2, msg);
showError(1, msg);