QT Creator 对话框QDialog

QT Creator 对话框QDialog(认识信号槽,颜色对话框,文件对话框,字体对话框,输入对话框,消息对话框,向导会话框)

mainWindow.cpp 文件下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>      //所有对话窗口类的基类

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //构造函数中定义一个QDialog类  this 指定父窗口为MainWindow类
    QDialog dialog(this);
    //调用show函数让其显示  如果此时运行  发现一个小窗口一闪而过
    //因为在一个函数中定义的变量,等这个函数执行完毕后,他就会自动释放,
    dialog.show();
}

MainWindow::~MainWindow()
{
    delete ui;
}

在这里插入图片描述

//为了不让dialog类消失  可以将QDialog对象的创建代码更改为:
    QDialog* dialog = new QDialog(this);
    dialog->show();

在这里插入图片描述


认识信号和槽

mainwindow.h文件下:

/*自定义的槽  必须要声明slots  这里的public 表明这个槽可以被外接调用,
 * 这边声明后 要到源文件中编写这个槽的实现代码,QT设计的快捷方式  alt+enter
 * 会出现   在mainwindow.cpp中添加声明  再次回车  编译器就会转到 mainwindow.cpp文件  
 * 并且创建 showChildDialog()槽的定义 只需要在其中添加代码即可
 * -----
 * 这种方法也适用于 先在源文件中添加定义 然后自动在头文件中添加声明 的情况
 * 
 * */
public slots:
    
    //void showChildDialog();
    void on_showChildButton_clicked();
};

#endif // MAINWINDOW_H

mainwindow.cpp 文件下

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>      //所有对话窗口类的基类

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //构造函数中定义一个QDialog类  this 指定父窗口为MainWindow类
    //QDialog dialog(this);
    //调用show函数让其显示  如果此时运行  发现一个小窗口一闪而过
    //因为在一个函数中定义的变量,等这个函数执行完毕后,他就会自动释放,
    //dialog.show();

    //为了不让dialog类消失  可以将QDialog对象的创建代码更改为:
    //QDialog* dialog = new QDialog(this);
    //dialog->show();

    //其实不用指针也能将对话框显示出来  可以将代码 更改如下
    //运行后会发现  对话框弹出来了  但是mainWindow没有弹出来 称之为 模块对话框  上面的为非模块对话框
    //QDialog dialog(this);
   // dialog.exec();

    //ui->setupUi(this);
    /*
     * 这里使用的connect() 函数将按钮的单击信号  clicked() 与新建的槽进行关联
     * clicked() 早 QPushButton类中进行了定义  而 connect() 是QObject类中的函数
     * 因为类继承自QObject 所以可以直接使用,
     * 四个参数:  1.发送信号的对象 2. 发送的信号 3.接收信号的对象 4.要执行的槽  
     * 信号和槽 分别使用 SIGNAL()  SLOT() 宏  括起来  
     **/
    //connect(ui->showChildButton,SIGNAL(clicked()),this,SLOT(showChildDialog()));

}

MainWindow::~MainWindow()
{
    delete ui;
}
//void MainWindow::showChildDialog()
void MainWindow::on_showChildButton_clicked()
{
    QDialog *dialog = new  QDialog(this);
    dialog->show();
}

在这里插入图片描述

颜色对话框

创建一个新的Qt GUI应用 明明为myDialog2 , 类名 mainwindow , 基类名 MainWindow ,
双击mainwindow.ui 进入设计模式 页面 添加一些 push Button
在这里插入图片描述
全选后右键 转到槽 这时
private slots 和 对应的函数实现就都有了 以下为 自动生成
mainwindow.h文件:

private slots:
    void on_pushButton_clicked();

mainwindow.cpp文件:

void MainWindow::on_pushButton_clicked()
{
}

修改后的代码:

void MainWindow::on_pushButton_clicked()
{
    /*
     * 使用 QColorDialog的静态函数 getColor来获取颜色
     * 参数 1.设置初始颜色 2.父窗口 3.对话框标题
     * Qt::red qt预定义的颜色对象
     * 返回值:是一个QColor类型数据
     * 如果现在运行 进入颜色对话框 直接点击确认 
     * 返回结果为:   color: QColor(ARGB 1, 1, 0, 0)
     * 四个参数为:A透明度  R红  G绿色 B蓝色
    **/
   QColor color = QColorDialog::getColor(Qt::red,this,tr("颜色对话框"));
   qDebug() << "color:" << color;
}

在这里插入图片描述还可以再添加第四个参数

void MainWindow::on_pushButton_clicked()
{
    /*
     * 参数 1.设置初始颜色 2.父窗口 3.对话框标题 4. 显示alpha(透明度)的设置内容的
    **/
   QColor color = QColorDialog::getColor(Qt::red,this,tr("颜色对话框"),QColorDialog::ShowAlphaChannel);
   qDebug() << "color:" << color;
}

文件对话框

在原来的基础上 继续操作
mainwindow.cpp文件:

#include <QFileDialog>      //文件对话头文件

/*
 * 文件对话框按钮的单击信号槽
 * */
void MainWindow::on_pushButton_2_clicked()
{
    /*
    *getOpenFileName() 获取选取的文件名  这个函数以一个模态方式运行一个对话框。然后选择一个文件,
    * 单击“打开”后,这个函数就可以返回一个文件的文件名
    * 参数: 1.父窗口  2.设置对话框标题 3.指定默认打开的文件路径
    * 4.设置文件类型过滤器(不指定 默认所有类型的文件 ;指定的话 中间以空格隔开 多个不同类型 可以用  ;;  隔开)
    */
    QString fileName = QFileDialog::getOpenFileName(this,tr("文件对话框"),"F:",tr("图片文件(*png *jpg);;文本文件(*txt)"));
    qDebug() << "fileName" << fileName;
}

运行后
在这里插入图片描述
qDebug会在console输出显示 :

fileName “F:/L_taxy/study/C/C++ 17 标准手册/你要找的.txt”

当然 也可以获取多个文件名

void MainWindow::on_pushButton_2_clicked()
{
    /*
    * 如果需要多个文件名  可以使用 getOpenFileNames() 函数来获取文件名  返回值是QStringList类型
    */
    //QString fileName = QFileDialog::getOpenFileName(this,tr("文件对话框"),"F:",tr("图片文件(*png *jpg);;文本文件(*txt)"));
    QStringList fileNames = QFileDialog::getOpenFileNames(this,tr("文件对话框"),"F:",tr("图片文件(*png *jpg);;文本文件(*txt)"));

    qDebug() << "fileNames" << fileNames;
}

在这里插入图片描述
你的qDegug 就会在console打印如下:
fileNames (“F:/L_taxy/study/C/C++ 17 标准手册/你要找的.txt”, “F:/L_taxy/study/C/C++ 17 标准手册/你要找的1.txt”, “F:/L_taxy/study/C/C++ 17 标准手册/你要找的2.txt”)

字体对话框

设置字体的对话框 一样的 在之前的代码上继续添加

mainwindow.cpp文件:

#include <QFontDialog>      //字体对话头文件

/*
 * 字体对话框的单击信号槽
**/
void MainWindow::on_pushButton_3_clicked()
{
    //ok 用于标记是否单击了ok按钮,然后活的所选择的字体
    bool ok;
    /*
     * 这里使用了QFontDialog的静态函数 getFont来获取选取的字体
     * 参数: 1.bool类型变量 用来存放按下的按钮状态    this 当当前窗口
     * 比如打开的字体对话框中单击了ok按钮,那么这里的ok就变成了true 告诉当前窗口已经选择了字体
    */
    QFont font = QFontDialog::getFont(&ok,this);
    //如果单击ok按钮  就让“字体对话框” 使用新字体
    if(ok) {
        ui->pushButton_3->setFont(font);
    // 如果单击Cancel按钮  就在console打印以下
    }else {
        qDebug() << tr("没有选中字体~~!");
    }
}

以下为单击后的界面:
在这里插入图片描述

单击ok后会发现 字体已经改变
在这里插入图片描述
单击Cancel后 在qt的console输出打印:

“没有选中字体~~!”

输入对话框

一样的套路
mainwindow.cpp文件:

#include <QInputDialog>     //输入对话头文件

/*
 * 输入对话框的单击信号槽
**/
void MainWindow::on_pushButton_4_clicked()
{
    bool ok;
    //获取字符串
    /*1.getText()函数 提供一个可输入字符串的对话框
    *参数:1.父窗口  2.设置窗口标题 3.设置对话框中的标签显示的文本 4.设置输入的字符串显示的格式(比如:密码可以是个黑点,可以按F1进去看) 5.设置输入框中的默认字符串 6.设置获取按下按钮信息的bool变量
    */
    QString string = QInputDialog::getText(this,tr("输入字符串对话框"),tr("请输入名:"),QLineEdit::Normal,tr("admin"),&ok);
    if(ok){
        qDebug() << "string:" << string;
    }
    //获取整数
    /*
    *2.getInt() 函数 可以提供一个输入整型数值的对话框,
    * 参数: 1. 父窗口 2.设置窗口标题 3. 设置对话框中的显示文本 4. 默认数值100 5. 可输入最小值-1000 6. 可输入最大值 1000 7. 10 表示箭头按钮 每次变化为10 8. 设置获取按下按钮信息的bool值
    */
    int value1 = QInputDialog::getInt(this,tr("输入整数对话框"),tr("请输入 -1000到1000之间的数值"),100,-1000,1000,10,&ok);
    if(ok){
        qDebug() << "valu1:" << value1;
    }
    //获取浮点数
    /*
     * 3.getDouble() 函数 可以提供一个输入浮点型数值的对话框
     * 参数: 1.父窗口 2.设置窗口的标题 3.设置对话框中显示文本 4. 默认值为0.0 5.最小可输入值为-1000 6.最大可输入值 1000 7. 小数点的位数 2  8.设置获取按下按钮信息的bool值
    */
    double value2 = QInputDialog::getDouble(this,tr("输入浮点数对话框"),tr("请输入-1000到1000之间的数值"),0.00,-1000,1000,2,&ok);
    if(ok){
        qDebug() << "value2" << value2;
    }

    QStringList items;
    items << tr("条目1") << tr("条目2");
    //获取条目
    /*
     * getItem() 函数 提供了个可以输入一个条目的对话框 需要先给它提供一些条目比如上面的itrms
     * 参数:5.  0  表示默认的是第0个条目(0就是第一个)
     * 6.true 设置条目是否可以被更改 true 就是可以被更改 ;  这里使用的是静态函数  也可以自己定义对象
    */
    QString item = QInputDialog::getItem(this,tr("输入条目对话框"),tr("请选择一个条目"),items,0,true,&ok);
    if(ok){
        qDebug() << "item:" << item;
    }
}


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

手动改了条目1 为 条目5
在这里插入图片描述
最终的输出为:
在这里插入图片描述

消息对话框

还是在原来的基础上做代码添加

mainwindow.cpp文件:

#include <QMessageBox>      //消息对话框 头文件

/*
 * 消息对话框的单击槽
**/
void MainWindow::on_pushButton_5_clicked()
{
    /*
     *QMessageBox 类 提供了一个模态的对话框用来通知用户一些信息  或者向用户提出一个问题并且获取答案
     * 以下四种消息对话 分别拥有不同的图标和提示音(这个是操纵系统设置的)
    */
    /*
    *1.问题对话框
    * 参数:1.父窗口 2.标题栏 3.显示信息 4.拥有的按钮(QMessageBox类提供的标准按钮)
    */
    int ret1 = QMessageBox::question(this,tr("问题对话框"),tr("你了解QT吗?"),QMessageBox::Yes,QMessageBox::No);
    if(ret1 == QMessageBox::Yes){
        qDebug() << tr("问题!");
    }
    /*
     * 2.提示对话框
     * 1.父窗口 2.标题栏 3.显示信息 4.拥有的按钮(QMessageBox类提供的标准按钮)
    */
    int ret2 = QMessageBox::information(this,tr("提示对话框"),tr("这是Qt书籍"),QMessageBox::Ok);
    if(ret2 == QMessageBox::Ok){
        qDebug() << tr("提示!");
    }
    /*
     * 3.警告对话框
     * 1.父窗口 2.标题栏 3.显示信息 4.拥有的按钮(QMessageBox类提供的标准按钮)
    */
    int ret3 = QMessageBox::warning(this,tr("警告对话框"),tr("不能提前结束!"),QMessageBox::Abort);
    if(ret3 == QMessageBox::Abort){
        qDebug() << tr("警告!");
    }
    /*
     * 4.错误对话框
     * 1.父窗口 2.标题栏 3.显示信息 4.拥有的按钮(QMessageBox类提供的标准按钮)
     */
    int ret4 = QMessageBox::critical(this,tr("严重错误对话框"),tr("发现一个严重错误,现在需要关闭所有的文件!"),QMessageBox::YesAll);
    if(ret4 == QMessageBox::YesAll){
        qDebug() << tr("错误");
    }
    /*
     *5.关于对话框
     * 1.父窗口 2.标题栏 3.显示信息 
     * about()函数没有返回值 默认只有一个按钮  
     */
    QMessageBox::about(this,tr("关于对话框"),tr("L_taxy@163.com 与您一起学习QT"));
}

在这里插入图片描述

以上就是依次显示的页面 , 当然 对应的console也会打印输出:
在这里插入图片描述

进度对话框

#include <QProgressDialog>  //进度对话框 头文件

/*
 * 进度对话框的单击槽
**/

void MainWindow::on_pushButton_6_clicked()
{
    QProgressDialog dialog(tr("文件赋值进度"),tr("取消"),0,50000,this);
    dialog.setWindowTitle(tr("进度对话框"));     //设置窗口标题
    dialog.setWindowModality(Qt::WindowModal);  //将对话框设置为模态
    dialog.show();
    for(int i = 0;i<50000;i++){                 //演示赋值进度
        dialog.setValue(i);                     //设置进度条当前的值
        QCoreApplication::processEvents();       //避免界面冻结
        if(dialog.wasCanceled()) break;         //按下取消按钮则中断
    }
    dialog.setValue(50000);                     //这样才能显示100% 因为for循环中少加了一次
    qDebug() << tr("复制结束");
}

在这里插入图片描述
控制台打印如下:
在这里插入图片描述

向导对话框

先在mainwindow.h 文件:

#include <QWizard>


private:
    Ui::MainWindow *ui;

    QWizardPage *createPage1();     //新添加 向导页面1
    QWizardPage *createPage2();     //新添加  向导页面2
    QWizardPage *createPage3();     //新添加  向导页面3
};

mainwindow.cpp文件:

/*
 * 向导对话框 单击槽
**/
void MainWindow::on_pushButton_8_clicked()
{
    QWizard wizard(this);
    wizard.setWindowTitle(tr("向导对话框"));
    wizard.addPage(createPage1());
    wizard.addPage(createPage2());
    wizard.addPage(createPage3());

    wizard.exec();

}
/*
 * 向导页面1
**/
QWizardPage *MainWindow::createPage1()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("介绍"));
    return page;
}

/*
 * 向导页面2
**/
QWizardPage *MainWindow::createPage2()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("用户选择信息"));
    return page;
}

/*
 * 向导页面3
**/
QWizardPage *MainWindow::createPage3()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("结束"));
    return page;
}

运行效果如下:
在这里插入图片描述

对话框定时关闭

QMessageBox *m_box = new QMessageBox(QMessageBox::Information,tr("Error"),tr("%1 错误").arg(msg));
QTimer::singleShot(1000,m_box,SLOT(accept()));
m_box->exec();
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是在Qt Creator中创建弹窗子窗口的步骤: 1. 在Qt Creator中创建一个新的Qt Widgets应用程序项目。 2. 在“项目”窗口中,右键单击项目并选择“添加新文件”。 3. 在“添加新文件”对话框中,选择“Qt”>“Qt Designer Form Class”,然后单击“选择”。 4. 在“类向导”对话框中,选择“Dialog without Buttons”,然后单击“选择”。 5. 在“添加新文件”对话框中,输入文件名并单击“下一步”。 6. 在“类定义”页面上,选择“使用现有类”并选择“QDialog”作为基类。 7. 单击“下一步”并完成向导。 8. 在“设计”模式下,将所需的小部件从“小部件”窗口拖放到对话框中。 9. 在“编辑”模式下,将小部件放置在所需的位置并设置其属性。 10. 在“项目”窗口中,右键单击项目并选择“添加新文件”。 11. 在“添加新文件”对话框中,选择“C++”>“C++源文件”,然后单击“选择”。 12. 在“添加新文件”对话框中,输入文件名并单击“下一步”。 13. 在“类定义”页面上,选择“使用现有类”并选择“QDialog”作为基类。 14. 单击“下一步”并完成向导。 15. 在新的源文件中,将以下代码添加到构造函数中: ```cpp #include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); } ``` 16. 在需要显示弹窗子窗口的代码中,创建一个Dialog对象并调用其exec()函数。 ```cpp Dialog dialog; dialog.exec(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光顶术士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值