我计算了一些条目,并希望在用户有很多条目时发出一条消息,因为这会造成混乱。

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

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

最佳答案

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

关于c++ - QErrorMessage不断出现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24059428/

10-10 03:36