我要建一个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秒钟后关闭。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top