Qt消息框 - 显示消息框直到超时

时间:2016-04-30 10:05:58

标签: c++ qt messagebox qtimer

我必须显示保存消息框,直到超时。 一旦发生超时,就转到插槽并执行一些功能。

timerToSave=new QTimer(this);
connect(timerToSave,SIGNAL(timeout()),this,SLOT(SavingStatusSlot()));

当超时移动到储蓄库时,上面的代码是计时器。

bool PopUpManager::PopUpSaveStaus()
    {
        timerToSave->start(3000);
        saveStatus=false;
        if(SetThread::getInstance()->UISaveStatus==ST_PROCESSING)
        {
            msgBox = new QMessageBox(0);
            msgBox->setModal(true);
            msgBox->setText("Saving ... ");
            msgBox->setIcon(QMessageBox::Information);
            msgBox->setStandardButtons(QMessageBox::Ok);
            msgBox->setCursor(Qt::WaitCursor);
            msgBox->setWindowFlags(Qt::FramelessWindowHint| Qt::WindowStaysOnTopHint);
            msgBox->setStyleSheet("background-color:#444;color:#FFF;outline:none;");
            msgBox->exec();
        }
        else
             SavingStatusSlot();
        return saveStatus;
    }

从其他类调用上面的方法,当用户单击“保存”按钮时。 一旦调用该方法,启动计时器,然后显示消息框。

如果超时发生调用插槽[在下面给出]

    void PopUpManager::SavingStatusSlot()
    {
        msgBox->button(QMessageBox::Ok)->animateClick();
        timerToSave->stop();

        if(SetThread::getInstance()->UISaveStatus==ST_OK)
        {
            saveStatus=true;
        }
        else 
        {
            PopUpWithOKButton(" Saving Error ");
            saveStatus=false;
        }
    }

这段代码正常工作,我已经使用了带OK按钮的消息框,并在超时时创建了动画点击并执行了一些功能。

现在我想显示没有按钮的消息框,当超时时,关闭消息框然后执行一些功能

但消息框close()无效。

void PopUpManager::ClosePopUP()
{
    if(msgBox->isEnabled())
        msgBox->close();
}

如果我调用上面的代码,消息框必须关闭,但它正在显示。

任何人都可以帮助我。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题

使用了msgBox-> show();而不是msgBox-> exec(); 和msgBox-> hide(); msgBox-> close();

代码如下。

bool PopUpManager::PopUpSaveStaus()
{

    timerToSave->start(3000);

    saveStatus=false;
    if(UISaveStatus==ST_PROCESSING)
    {
        msgBox = new QMessageBox(QMessageBox::Information,"Error","Processing ... ",0,0,Qt::FramelessWindowHint| Qt::WindowStaysOnTopHint);
        msgBox->setStandardButtons(0);
        msgBox->setCursor(Qt::WaitCursor);
        msgBox->setStyleSheet("background-color:#444;color:#FFF;outline:none;");
        msgBox->show();
    }
    else
    {
         SavingStatusSlot();
    }
    return saveStatus;
}

void PopUpManager::SavingStatusSlot()
{
    msgBox->hide();
    timerToSave->stop();

    if(UISaveStatus==ST_OK)
    {
        saveStatus=true;
    }
    else
    {
        PopUpWithOKButton(" communication Failed ");
        saveStatus=false;
    }
}