自动关闭QMessageBox

Mar*_*tin 8 qt qmessagebox

我正在构建一个Qt Symbian项目,我想向用户显示应在几秒后自动关闭的通知.我看到诺基亚在他们的ui中使用了很多.

现在我正在使用下面的代码,以便用户可以关闭QMessageBox但我希望它能在1或2秒后自动关闭QMessageBox.我怎么能用Qt做到这一点?

QMessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
Run Code Online (Sandbox Code Playgroud)

Mar*_*tin 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();
Run Code Online (Sandbox Code Playgroud)

这是我的班级:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你也可以通过简单地添加`msgBox.setStandardButtons(QMessageBox :: Ok);来使用QAbstractPushButton.animateClick方法.msgBox.button(QMessageBox提示:: OK).animateClick(超时)` (4认同)

And*_*y M 4

我建议子类化QMessageBox以添加您自己想要的行为......

setAutoClose(bool)添加诸如和 之类的方法并在启用自动关闭选项时setAutoCloseTimeout(int)触发QTimeron会很有趣!showEvent

这样,您甚至可以改变您的外观QMessageBox,并显示一条文字“此框将在 XXX 秒后自动关闭...”或进度条等...