Qt学习之路(5):对话框传递数据|标准对话框QMessageBox

模态对话框的数据传递相对较为简单,只讨论非模态的对话框的数据传递。由于对话框关闭的时候会调用accept或者reject(),所以我们可以在里面进行处理.

自己定义一个带button(Ok,Cancel)的对话框,然后进行在accept(),reject()函数里进行对数据的输出.
void UserAgeDialog::accept()//在这里发送信号
{
    qDebug()<<"Dialog is accepted";
     QDialog::accept();//调用基类的函数,将会发送信号
}
void UserAgeDialog::reject()
{
    qDebug()<<"Dialog is rejected";
    QDialog::reject();

}

===========================================

这是调用了QMessageBox(模态对话框)的几个static函数创建的一个question对话框,它很方便,但是并不灵活(只能添加一些按钮)。我们只能使用几种简单的形式.

void MainWindow::open()
{


    auto ret = QMessageBox::question(this,"Question","Are you Okay",
                                     QMessageBox::Yes|QMessageBox::No|QMessageBox::Save,QMessageBox::Yes);
  if(QMessageBox::Yes == ret)
      QMessageBox::information(this,"Hmm...","I'm glad to say it");
  else if(QMessageBox::No == ret)
        QMessageBox::information(this,"Hmm...","I'm so sorry");
  else
        QMessageBox::information(this,"Hmm...","all files have been saved");
}

#

===========================================

如果我们想要制定QMessageBox的细节,那么就必须调用相应的API接口自己设置.

有几点需要注意,我们处理自定义的按钮时,需要使用clickedbutton()进行判断,这是因为exec()的返回值不会返回除了内置的一些按钮之外的值,对于我们自定义的按钮,它只会返回0.

void MainWindow::open()
{

   QMessageBox msgBox(QMessageBox::Information, "Question","The document has been modified");
   msgBox.setInformativeText("Do you want to save all your changes?");
   msgBox.setDetailedText(tr("Differences here..."));//添加详细信息,会自动添加一个按钮
   msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard |
                             QMessageBox::Cancel);
   msgBox.setDefaultButton(QMessageBox::Save);//设定默认按钮
     QPushButton *okbtn=new QPushButton(QObject::tr("确定"));
   msgBox.addButton(okbtn,QMessageBox::AcceptRole);//添加自定义按钮(注意可以是中文)
   auto ret = msgBox.exec();//获得返回值
   switch (ret)
   {
   case QMessageBox::Save: qDebug() << "Save document!"; break;
   case QMessageBox::Discard: qDebug() << "Discard changes!"; break;
   case QMessageBox::Cancel: qDebug() << "Close document!"; break;
   }
   if(msgBox.clickedButton()==okbtn)//处理自定义的按钮
       qDebug()<<"Fucking";
}

Qt学习之路(5):对话框传递数据|标准对话框QMessageBox_第1张图片

你可能感兴趣的:(Qt学习之路(5):对话框传递数据|标准对话框QMessageBox)