Автоматический близкий QMessageBox

Я разрабатываю спокойный Проект Symbian, и я хочу показать уведомление для пользователя, который должен автоматическое завершение после нескольких секунд. Я видел, что Nokia использует это много в их ui.

Прямо сейчас я использую код ниже так, чтобы пользователь мог закрыть QMessageBox, но я хотел бы его, если бы это было возможно к автоматическому завершению QMessageBox после 1 или 2 секунд. Как я могу сделать этот QT использования?

QMessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
8
задан demonplus 2 November 2015 в 13:41
поделиться

2 ответа

Я бы предложил использовать подкласс QMessageBox, чтобы добавить собственное желаемое поведение....

Было бы интересно добавить такие методы как setAutoClose(bool) и setAutoCloseTimeout(int) и запустить QTimer на showEvent, когда опция автозакрытия включена !

Таким образом, вы даже можете изменить внешний вид вашего QMessageBox и иметь текст "Это поле закроется автоматически через XXX секунд..." или индикатор прогресса и т.д....

4
ответ дан 5 December 2019 в 11:24
поделиться

Большое спасибо! Мое решение:

Я создал свой собственный класс (MessageBox), это мой код для его отображения:

MessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setAutoClose(true);
msgBox.setTimeout(3); //Closes after three seconds
msgBox.exec();

Это мой класс:

class MessageBox : public QMessageBox

int timeout;
bool autoClose;
int currentTime;

void MessageBox::showEvent ( QShowEvent * event ) {
    currentTime = 0;
    if (autoClose) {
    this->startTimer(1000);
    }
}

void MessageBox::timerEvent(QTimerEvent *event)
{
    currentTime++;
    if (currentTime>=timeout) {
    this->done(0);
    }
}
7
ответ дан 5 December 2019 в 11:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: