想超时自动关闭一个QMessageBox,没找到好的例子,想了想,只好自己写一个,要完成以下两件事,
(1) 定时干活, checkTimer,每次时间一到就重复做某件事
(2) 超时关闭,不能没完没了。
源码如下,
class QMyQuestion: public QMessageBox{
public:
QMyQuestion(QString text, int timeout_ms){
closeTimer.start(timeout_ms) ;
QObject::connect(&closeTimer, &QTimer::timeout, this, &QMyQuestion::onCloseTimer);
checkTimer.start(33);
QObject::connect(&checkTimer, &QTimer::timeout, this, &QMyQuestion::onCheckTimer);
setIcon(QMessageBox::Question);
setText(text);
setStandardButtons( QMessageBox::Yes );
setDefaultButton(QMessageBox::Yes);
addButton(QMessageBox::No);
}
~QMyQuestion(){
}
private:
QTimer checkTimer;
QTimer closeTimer;
void onCloseTimer(){
this->close();
}
void onCheckTimer(){
static int check =0;
qDebug() << "timer checked "<< check ++;
}
};
怎么使用呢?
int ret = box.exec();
if(QMessageBox::StandardButton::Yes == ret){
qDebug() << "message OK";
} else {
qDebug() << "message NOK";
}
这里,不论怎么设置,超时关闭时貌似都是返回的No,不能返回Yes,设置那个DefaultButton也同用,不知道为什么。
本文结束。