QEventLoop丢弃一些信号

时间:2017-06-16 03:28:54

标签: qt qeventloop

我有一个关于QEventLoop的问题:如何设置QEventLoop以丢弃某些信号

class MyThread : public QThread
{
    Dialog *_dlg;
public:
    MyThread(Dialog* dlg)
        : _dlg(dlg)
    {

    }
    virtual void run()
    {
        QTimer* _timer;
        _timer = new QTimer(this);
        connect(_timer, SIGNAL(timeout()),
                _dlg, SLOT(timeout()), Qt::BlockingQueuedConnection);
        _timer->start(3000);

        QEventLoop loop;
        loop.exec(QEventLoop::WaitForMoreEvents);
    } 
};

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    connect(ui->pushButton, SIGNAL(clicked()),
            this, SLOT(click()));

    MyThread* thread = new MyThread(this);
    thread->start();
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::click()
{
    QMessageBox msgBox(this);
    msgBox.setText("click.");
    msgBox.exec();
}

void Dialog::timeout()
{
    QMessageBox msgBox(this);
    msgBox.setText("timeout.");
    msgBox.exec();
}

这是我的代码,当启动这个程序时,每隔5秒就会显示一个超时QMessageBox。 但我想如果我按下按钮然后显示单击消息框,并不显示超时消息框.. 我没有找到任何方法来做到这一点

enter image description here

0 个答案:

没有答案