Окно сообщения Qt - показывать окно сообщения до истечения времени ожидания

Я должен показать окно сообщения о сохранении до истечения времени ожидания. Как только истечет время ожидания, перейдите в слот и выполните какую-либо функцию.

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;
        }
    }

этот код работает, я использовал окно сообщения с кнопкой «ОК», и когда тайм-аут создал анимированный щелчок и выполнил некоторую функцию.

Теперь я хочу показать окно сообщения без кнопки, а по истечении времени ожидания закрыть окно сообщения, а затем выполнить некоторую функцию.

Но окно сообщения close() не работает.

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

если я вызову приведенный выше код, окно сообщения должно закрыться, но оно отображается.

Может ли кто-нибудь помочь мне в этом. Заранее спасибо.


person tharunkumar    schedule 30.04.2016    source источник
comment
возможно, эта страница поможет вам: http://stackoverflow.com/questions/2236800/auto-close-qmessagebox   -  person Farhad    schedule 30.04.2016


Ответы (1)


я решил проблему

используется 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;
    }
}
person tharunkumar    schedule 03.05.2016