質問
私は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)
のようなメソッドを追加し、オートクローズオプションが有効になっているときQTimer
にshowEvent
をトリガするために興味深いものになるだろう!
このように、あなたもあなたの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秒後に閉じます。