对话框的创建——Qt

  • 模态对话框 :在该对话框打开的时候,不可以对其他窗口进行操作
  • 非模态对话框 :在该对话框打开的时候,可以对其他窗口进行操作

新建按钮,弹出对话框

模式对话框

在这里插入图片描述

    ui->setupUi(this);

    // 新建按钮弹出对话框
    connect(ui->action,&QAction::triggered,[=](){
            // 创建一个模态对话框
        QDialog dlg(this);

        dlg.exec();
			// 点击完弹出对话框的×之后,控制台才会显示下一个条输出语句
        qDebug() << "模态对话框弹出";
        
       });     

在这里插入图片描述

非模态对话框

   // 新建按钮弹出对话框
   connect(ui->action,&QAction::triggered,[=](){
   
    //非模态对话框
    QDialog dlg2(this);
    //设置对话框大小
    dlg2.resize(200,100);
    dlg2.show();

    qDebug() << "模态对话框弹出";
    
    });

新建的对话框在栈区,点击后显示一下就会消失,可以放在堆上

    // 新建按钮弹出对话框
   connect(ui->action,&QAction::triggered,[=](){

    //非模态对话框
    QDialog * dlg2 = new QDialog(this);
    //设置对话框大小
    dlg2->resize(200,100);
    dlg2->show();

    qDebug() << "模态对话框弹出";
    });

运行结果:
在这里插入图片描述


消息对话框

错误提示对话框

  • 关键词:critical
  • 头文件:#include <QMessageBox>
	ui->setupUi(this);

    // 新建按钮弹出对话框
   connect(ui->action,&QAction::triggered,[=](){
    // 消息对话框
       QMessageBox::critical(this,"critical","错误");
    });

运行结果:
在这里插入图片描述

信息对话框

    ui->setupUi(this);
    // 新建按钮弹出对话框
   connect(ui->action,&QAction::triggered,[=](){
       // 信息对话框
       QMessageBox::question(this,"info","信息");
    });

在这里插入图片描述

提问对话框

    ui->setupUi(this);
    // 新建按钮弹出对话框
   connect(ui->action,&QAction::triggered,[=](){
       //提问对话框
       QMessageBox::question(this,"ques","提问");
    });

结果:
在这里插入图片描述

警告对话框

    ui->setupUi(this);
    // 新建按钮弹出对话框
   connect(ui->action,&QAction::triggered,[=](){
       //警告对话框
       QMessageBox::warning(this,"warning","警告");
    });

在这里插入图片描述


其他标准对话框

颜色对话框

  • 关键词:QColorDialog
  • 需要添加头文件:#include <QColorDialog>
    ui->setupUi(this);
    // 新建按钮弹出对话框
   connect(ui->action,&QAction::triggered,[=](){
       //颜色对话框
       QColorDialog::getColor(255,0,0);
    });

在这里插入图片描述也可以返回选中颜色的rbg值

    ui->setupUi(this);
    // 新建按钮弹出对话框
   connect(ui->action,&QAction::triggered,[=](){
//       //颜色对话框
       QColor co = QColorDialog::getColor(255,0,0);
       qDebug() << "r=" << co.red()<< "g=" << co.green()<< "b=" << co.blue();
    });

在这里插入图片描述随便选中一个颜色后,点击ok控制台会输出:
在这里插入图片描述

文件对话框

  • 关键词:QFileDialog
  • 需要添加头文件:#include <QFileDialog>
    ui->setupUi(this);
    // 新建按钮弹出对话框
   connect(ui->action,&QAction::triggered,[=](){
       //文件对话框
       QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\27788\\Desktop");
    });

在这里插入图片描述

字体对话框

  • 关键字:QFontDialog
  • 需要添加头文件:#include <QFontDialog>
    ui->setupUi(this);
    // 新建按钮弹出对话框
   connect(ui->action,&QAction::triggered,[=](){
       //字体对话框
       bool flag;
       QFont font = QFontDialog::getFont(&flag,QFont("华文彩云",36));
       qDebug() <<"字体:"<<font.family()<<"字号"<<font.pointSize() <<"是否加粗" << font.bold() << "是否倾斜"<<font.italic();     
    });

在这里插入图片描述选中一个点击OK,控制台会输出
在这里插入图片描述

### Qt 中实现嵌套对话框Qt 的开发环境中,`QDialog` 是用于创建对话框的核心类之一。通过 `exec()` 方法可以启动模态对话框,而调用 `show()` 则是非模态的方式[^2]。当需要在一个对话框内部再弹出另一个对话框时,则称为 **嵌套对话框**。 以下是关于如何在 Qt 中实现嵌套对话框的具体说明: #### 1. 使用模态方式实现嵌套对话框 模态对话框会阻塞当前线程直到该对话框关闭为止。因此,在一个已经存在的对话框中再次调用新的对话框实例并使用其 `exec()` 函数即可完成嵌套效果[^3]。 下面提供了一个简单的 C++ 示例代码来展示这种机制的工作原理: ```cpp // 主窗口头文件声明部分省略... void MainWindow::on_FirstDialogButton_clicked() { FirstDialog firstDlg; // 创建第一个对话框对象 if (firstDlg.exec() == QDialog::Accepted) { // 显示第一个模态对话框 SecondDialog secondDlg; // 当前对话框接受后, 创建第二个对话框 if (secondDlg.exec() == QDialog::Accepted) { // 启动第二个模态对话框 qDebug() << "Both dialogs were accepted!"; } } } ``` 上述代码片段展示了两个连续的模态对话框是如何工作的:点击按钮触发首个对话框;只有在其被成功处理之后才会显示下一个层次上的新对话框[^1]。 #### 2. 非模态情况下的嵌套管理 对于非模态对话框来说,由于它们不会阻止主线程继续运行,所以要特别注意生命周期管理和信号槽连接逻辑以确保程序行为符合预期。 这里给出一段伪代码表示可能的设计思路: ```cpp FirstNonModalDialog *nonmodalOne = new FirstNonModalDialog(this); connect(nonmodalOne,SIGNAL(finished()),this,SLOT(handleNested())); nonmodalOne->open(); // Slot function to handle nested dialog after the first one finishes. void MainWindow::handleNested(){ delete nonmodalOne; SecondNonModalDialog* anotherInstance=new SecondNonModalDialog(this); connect(anotherInstance,SIGNAL(closed()),SLOT(doSomethingElse())); anotherInstance->show(); } ``` 此模式下需要注意内存泄漏风险以及多个活动窗口间的相互作用关系等问题。 #### 总结 无论是采用哪种形式——模态还是非模态——都可以轻松地构建起具有多层结构的应用界面布局方案。关键是理解每种类型的适用场景及其背后的技术细节,并合理运用这些工具去满足实际需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值