質問

私はQtのSymbianのプロジェクトを構築していると私はそのいくつかの秒後にすべきで自動クローズユーザーの通知を表示したいです。私は、Nokiaが彼らのUIでこのロットを使用していることを見てきました。

今、ユーザーがQMessageBoxを閉じることができるように、私は以下のコードを使用していますが、オート1または2秒後にQMessageBoxをクローズすることが可能であった場合、私はそれをしたいと思います。どのように私はQtのを使ってこれを行うことができますか?

QMessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
役に立ちましたか?

解決

私は自分自身の目的の動作を追加するQMessageBoxをサブクラス化することをお勧め...

setAutoClose(bool)setAutoCloseTimeout(int)のようなメソッドを追加し、オートクローズオプションが有効になっているときQTimershowEventをトリガするために興味深いものになるだろう!

このように、あなたもあなたのQMessageBoxのapparenceを変えると言ってテキスト「このボックスはXXX秒で自動的に閉じます...」またはプログレスバーを、持っていた可能性等...

他のヒント

おかげで本当に多くの!私の解決策ます:

私は、これはそれを示すために私のコードである私自身のクラス(メッセージボックス)を作成します:

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);
    }
}

代わりに、あなたは非常に簡単に任意のダイアログボックスまたはSingleshotを閉じるためにQLabelタイマーを使用することができます:

QTimer *timer;
QTimer::singleShot(10000, msgBox, SLOT(close()));

このコードを使用してます:

QTimer *timer;
QTimer::singleShot(10000, msgBox, SLOT(close()));

あなたが得る:

QObject::connect: Incompatible sender/receiver arguments
        QTimer::timeout() --> QMessageBox::

Becouseメッセージボックス(受信機)がQtCoreオブジェクトで..とQMessageBoxのサブクラスQtGuiなければなりません。 /: httpsを参照してください。 /srinikom.github.io/pyside-docs/PySide/QtCore/QTimer.html#PySide.QtCore.PySide.QtCore.QTimer.singleShotする

これは、誰かを助けるかもしれない、

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

メッセージボックスには、5秒後に閉じます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top