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.

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");
}
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 такой же, как первый.

0

По вопросам рекламы [email protected]