8

Qt Symbian プロジェクトを構築しています。数秒後に自動的に閉じる通知をユーザーに表示したいと考えています。Nokia が UI でこれを多用しているのを見てきました。

現在、ユーザーが QMessageBox を閉じることができるように以下のコードを使用していますが、1 秒または 2 秒後に QMessageBox を自動的に閉じることができれば幸いです。Qtを使用してこれを行うにはどうすればよいですか?

QMessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
4

6 に答える 6

7

本当にありがとう!私の解決策:

独自のクラス (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);
    }
}
于 2010-02-10T22:21:10.203 に答える
4

サブクラス化QMessageBoxして、独自の望ましい動作を追加することをお勧めします...

setAutoClose(bool)やのようなメソッドを追加して、AutoClose オプションが有効になっているときにonsetAutoCloseTimeout(int)をトリガーすると面白いでしょう!QTimershowEvent

このようにQMessageBoxして、「このボックスは XXX 秒後に自動的に閉じます...」というテキストやプログレス バーなどの外観を変更することもできます...

于 2010-02-10T14:08:29.053 に答える
2

これは誰かを助けるかもしれません、

msgBox.button(QMessageBox::Ok)->animateClick(5000);

messageBox は 5 秒後に閉じます。

于 2019-03-08T12:31:36.397 に答える