2016-04-30 19 views
0

タイムアウトまで保存メッセージボックスを表示する必要があります。 タイムアウトが発生したら、スロットに行き、何らかの機能を実行します。Qtメッセージボックス - タイムアウトまでメッセージボックスを表示

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

上記のコードは、タイムアウトがsaveslotに移動するときのタイマーです。

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ボタンとするとき、タイムアウトがアニメーションクリックを作成し、いくつかの機能を実行するとメッセージボックスを使用していました。

は、今私は、ボタンやタイムアウトせずにメッセージボックスを表示するメッセージボックスは、その後、メッセージボックスの近くには、()に動作していないいくつかの機能

しかしを行う閉じたいです。

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

上記のコードを呼び出すと、メッセージボックスは閉じる必要がありますが、表示しています。

誰でも私にこれを手伝ってもらえますか? ありがとうございます。

+1

多分このページのヘルプあなたは:[http://stackoverflow.com/questions/2236800/auto-close-qmessagebox](http://stackoverflow.com/questions/2236800/auto-close-qmessagebox) – aghilpro

答えて

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; 
    } 
} 
関連する問題