Я разрабатываю спокойный Проект Symbian, и я хочу показать уведомление для пользователя, который должен автоматическое завершение после нескольких секунд. Я видел, что Nokia использует это много в их ui.
Прямо сейчас я использую код ниже так, чтобы пользователь мог закрыть QMessageBox, но я хотел бы его, если бы это было возможно к автоматическому завершению QMessageBox после 1 или 2 секунд. Как я могу сделать этот QT использования?
QMessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
Я бы предложил использовать подкласс QMessageBox
, чтобы добавить собственное желаемое поведение....
Было бы интересно добавить такие методы как setAutoClose(bool)
и setAutoCloseTimeout(int)
и запустить QTimer
на showEvent
, когда опция автозакрытия включена !
Таким образом, вы даже можете изменить внешний вид вашего QMessageBox
и иметь текст "Это поле закроется автоматически через XXX секунд..." или индикатор прогресса и т.д....
Большое спасибо! Мое решение:
Я создал свой собственный класс (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);
}
}