乐趣区

Qt中几个常用的标准对话框

/*
 * 这是几个标准对话框的使用方法
 * 可以通过按钮触发槽,进而创建标准对话框对象
 * 创建对象后所需操作仅仅是设置几个参数
 */

#include <QDebug>
#include <QColorDialog> // 颜色对话框
#include <QFileDialog>  // 文件对话框
#include <QFontDialog>  // 字体对话框
#include <QInputDialog> // 输入对话框
#include <QProgressDialog>  // 进度对话框




选取颜色的对话框

void MyWidget::on_pushButton_clicked()
{

    QColor color = QColorDialog::getColor(Qt::red, this, "颜色框"/*,
                                          QColorDialog::ShowAlphaChannel*/);
    // 调用颜色对话框的静态函数,优点是不用创建对象
    // 前 3 参数为初始颜色,父窗口,对话框标题,// 注释掉的可选参数功能是在对话框中显示透明度选项,qDebug()<< "color:" << color;// 调试用
    // qDebug 的输出比如:color:  QColor(ARGB 1, 0, 0, 0),分别是透明度 alpha, 红绿蓝
    //alpha 默认值 1 表示完全不透明,0 是完全透明,三基色 0~1 对应 0~255

    /*
     // 也可以创建对象,设置方面更灵活
     QColorDialog dialog(Qt::red, this);    // 创建对象
     dialog.setOption(QColorDialog::ShowAlphaChannel);
     dialog.exec();                         // 模态方式运行
     QColor color = dialog.currentColor();  // 获取当前颜色
     qDebug() << "color:" <<color;         // 输出颜色信息
    */
}



文件对话框,打开保存文件等,但以下函数均只是获取文件 / 文件夹路径和名称,并不执行打开、保存等实际操作

void MyWidget::on_pushButton_2_clicked()
{
    // 该类有许多其他函数,可自行查阅
    QString fileName = QFileDialog::getOpenFileName(this, "单文件选择框", "d:",
                                                    "图片文件 (*png *jpg);; 文本文件 (*txt)");
    // 以模态方式运行一个文件对话框,选择单个文件,不能是文件夹
    // 单击打开,返回所选文件名称格为如:fileName:  "E:/ 爱佳利 /Pictures/she/she.png"
    // 多个文件是 getOpenFileNames,需要使用 QStringList fileNames =
    // 4 参数为父窗口,对话框标题,默认路径,文件类型过滤器,不指定则默认可选择所有类型的文件
    // 同类别两文件类型之间需要一个空格 *png *jpg,不同类别之间两分号;;
    // 另有 getSaveFileName() 保存文件和 getExistingDirectory() 获取文件夹路径,不能是文件

    qDebug() << "fileName:" << fileName;

/*
    QString fileName1 = QFileDialog::getSaveFileName(this, "保存文件对话框", "d:","图片类型 (*png)");
    qDebug() << "fileName1:" << fileName1 ;
    QString fileName2 = QFileDialog::getExistingDirectory(this, "文件路径对话框", "d:");
    qDebug() << "fileName2:" << fileName2;
    QStringList fileNames = QFileDialog::getOpenFileNames(this, "多文件选择框", "d:",
                                                          "图片文件 (*png *jpg)");
    qDebug() << "fileNames:";
    for(auto x: fileNames){qDebug() << x;
    }
*/
}



选取字体的对话框

void MyWidget::on_pushButton_3_clicked()
{bool ok {false};    //ok 用于标记是否单击了 OK 按钮

    QFont font = QFontDialog::getFont(&ok, this);
    // 单击 OK 按钮,ok 设置为 true,font 指向新字体

    // 根据是否选择了字体,进行字体更改
    if(ok) ui->pushButton_3->setFont(font);

}



限定输入类型和范围的对话框

void MyWidget::on_pushButton_4_clicked()
{
    // 用于限定输入内容
    bool ok {false};    // 用于标记是否输入成功
// 输入字符串
    QString string = QInputDialog::getText(this, "输入字符串", "用户名:",
                                           QLineEdit::Normal, "admin", &ok);
    if(ok) qDebug() << "string:" << string;
    // 6 参数作用为:父窗口,窗口标题,对话框中标签显示文本,// 输入内容的显示模式(如密码设为黑点),输入框中默认字符串,点击确认后的变量

/*
// 输入整数
    int value1 = QInputDialog::getInt(this, "输入整数", "年龄",
                                      18, 1, 200, 1, &ok);
    if(ok) qDebug() << "value1:" << value1;
    // 第二行参数作用为:默认数值,最小,最大,使用箭头的变化幅度,确认标记

// 输入浮点数
    double value2 = QInputDialog::getDouble(this, "输入浮点数", "圆周率",
                                            3.14, 2.14, 4.14, 10, &ok);
    if(ok) qDebug() << "value2:" << value2;
    // 二行参数 10 表示格式为保留 10 位小数

// 输入或选择项目
    QStringList items{};
    items << "项目 1" <<"项目 2";
    QString item = QInputDialog::getItem(this, "项目输入", "选择或输入一个项目",
                                         items, 0, true, &ok);
    if(ok) qDebug() << "item:" <<item;
    // 二行参数为:提供的可选项目列表对象,默认选中项目 0,项目可自主输入,确认标记

*/    
}



进度条对话框

//Qt 中进度条的显示方式有 2 种,一种是控件方式:QProgressBar;// 一种是针对慢速过程的对话框方式:QProgressDialog。void MyWidget::on_pushButton_5_clicked()
{
    //QProgressBar 和 QProgressDialog 均可通过 setRange 设置计数范围,用循环累加实现变化。const long COUNT = {999999};// 设置进度条计数值
    const long STEP = {1};// 设置计数步进值

    QProgressDialog *progressDlg = new QProgressDialog(this);
    progressDlg->setWindowModality(Qt::WindowModal);    // 设置模态
    progressDlg->setMinimumDuration(0);//dialog 出现需等待的时间
    progressDlg->setWindowTitle("进度对话框");       // 标题
    progressDlg->setLabelText("正在复制");          // 显示文本
    progressDlg->setCancelButtonText("取消");      // 按钮文本
    progressDlg->setRange(0, COUNT);
    for(long i = 0;i <= COUNT;i += STEP){if(progressDlg->wasCanceled())
            return;
        progressDlg->setValue(i);
    }
    qDebug() << "复制结束!";}

退出移动版