模态和非模态对话框的使用

模态和非模态对话框的使用

创建对话框分模态和非模态两种

  • 模态:对话框运行时主窗口处于“模糊”状态,主窗口不可进行操作, 直到对话框退出。
  • 非模态:主窗口和对话框均可操作。

示例

A modal dialog:  //一个模态对话框示例
void EditorWindow::countWords()
{
    WordCountDialog dialog(this);
    dialog.setWordCount(document().wordCount());
    dialog.exec();
}            //exec()方法是带阻塞的,直到窗口关闭

A modeless dialog:   //非模态对话框
void EditorWindow::find()
{
    if (!findDialog) {
        findDialog = new FindDialog(this);
        connect(findDialog, SIGNAL(findNext()), this, SLOT(findNext()));
    }
    findDialog->show();
    findDialog->raise();
    findDialog->activateWindow();
}

对话框交互方式

  • 非模态交互方式:connect对话框的信号与主窗口的槽
/查找button
void FindTextDialog::on_pushButtonFind_clicked()
{
    QString text = ui->lineEdit->text();    //获得要查找的文本
    int mode = 1;
    emit(FindButtonClicked(text,mode));     //发送信号
}
void MainWindow::FindTextDialogShow()
{
   if(NULL == m_pDlgFindText)
   {
       m_pDlgFindText = new FindTextDialog(this); //创建查找对话框
       m_pDlgFindText->setModal(false);
       QObject::connect(m_pDlgFindText, &FindTextDialog::FindButtonClicked, this, &MainWindow::FindText);
   }
   m_pDlgFindText->show();
   m_pDlgFindText->raise();
   m_pDlgFindText->activateWindow();
}
  • 模态对话框交互方式
void ShowKBDialog()
{
    CNumKeyInput keyBoardDlg;		//一个数字输入对话框
    INT32 s32Ret     = 0;
    INT32 s32Value   = 0;
    QString strRet   = "";
    
    s32Ret = keyBoardDlg.exec();	//阻塞等待键盘关闭
    strRet = keyBoardDlg.GetValue(); //获取输入值	
   
    if (QDialog::Accepted == s32Ret)	
    {
    	//下一步操作
    }
}
posted @ 2022-05-23 14:52  HL棣  阅读(19)  评论(0编辑  收藏  举报  来源