题
我要建一个Qt Symbian的项目,我想展现一个通知用户应自动关闭几秒钟后。我已经看到,诺基亚使用这个有很多在他们的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),这是我的用于显示它的代码:
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 MSGBOX(接收机)必须是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);
在MessageBox 5秒钟后关闭。
不隶属于 StackOverflow