2010-02-10 161 views
8

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

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

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

回答

4

我会建议继承QMessageBox添加自己想要的行为......

这将是有趣的,像添加和setAutoClose(bool)方法setAutoCloseTimeout(int)并启用自动关闭选项的情况下showEvent引发QTimer

这样,你甚至可以改变你的QMessageBox的apparence,并有文字说:“这个盒子将在XXX秒自动关闭......”或者一个进度条,等等

5

感谢真多!我的解决办法:

我创建了自己的类(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); 
    } 
} 
+0

您的startTimer定义在哪里? – qed 2014-11-12 00:31:07

+3

您也可以使用QAbstractPushButton.animateClick方法,只需添加'msgBox.setStandardButtons(QMessageBox :: Ok); msgBox.button(QMessageBox提示:: OK).animateClick(超时)' – 2014-11-26 06:12:32

1

相反,你可以使用Singleshot计时器关闭任何对话框或QLabel都很容易:

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