Qt文件对话框、颜色对话框、字体对话框、输入对话框

文件对话框

对应的API

cpp 复制代码
//选择单个文件
[static] QString QFileDialog::getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

//选择多个文件
[static] QStringList QFileDialog::getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

举例:

注意:需要判断选择后的文件路径是否为空,为空则证明没有选择,不需要做任何处理

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QFileDialog>
#include<QLineEdit>
#include<QPushButton>
#include<QLabel>
#include<QGridLayout>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr) : QWidget(parent)
    {
        resize(500,100);
        QGridLayout* grid=new QGridLayout(this);

        //选择单个文件对话框
        QLabel* lbl=new QLabel("选择单个文件的路径:",this);
        QLineEdit* edit=new QLineEdit(this);
        QPushButton* btn=new QPushButton("选择单个文件",this);

        grid->addWidget(lbl,0,0);
        grid->addWidget(edit,0,1,1,2);
        grid->addWidget(btn,0,4);

        //点击按钮,打开文件对话框选择文件
        connect(btn,&QPushButton::clicked,this,[=](){
            //参数1:父窗口
            //参数2:对话框标题
            //参数3:对话框刚打开时的文件路径
            //参数3:文件过滤器,比如这里只能选择.cpp .h后缀的文件
            //返回值:文件路径
            QString file_path=QFileDialog::getOpenFileName(this,"选择文件","./","FILE(*.cpp *.h)");
            //需要判断是否为空,为空则证明没有选择
            if(!file_path.isEmpty())
            {
                edit->setText(file_path);
            }
        });

        //选择多个文件对话框
        QLabel* lbl2=new QLabel("选择多个文件的路径:",this);
        QLineEdit* edit2=new QLineEdit(this);
        QPushButton* btn2=new QPushButton("选择多个文件",this);

        grid->addWidget(lbl2,1,0);
        grid->addWidget(edit2,1,1,1,2);
        grid->addWidget(btn2,1,4);

        //点击按钮,打开文件对话框选择文件
        connect(btn2,&QPushButton::clicked,this,[=](){
            //参数1:父窗口
            //参数2:对话框标题
            //参数3:对话框刚打开时的文件路径
            //参数3:文件过滤器,比如这里只能选择.cpp .h后缀的文件
            //返回值:文件路径
            QStringList file_paths=QFileDialog::getOpenFileNames(this,"选择文件","./","FILE(*.cpp *.h)");
            //需要判断是否为空,为空则证明没有选择
            if(!file_paths.isEmpty())
            {
                QString str_file_path;
                for(const auto& itor:file_paths)
                {
                    str_file_path+=itor;
                    str_file_path+=";";
                }
                edit2->setText(str_file_path);
            }


        });

    }
    ~Widget()=default;
};
#endif // WIDGET_H

颜色对话框

对应的API

cpp 复制代码
[static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions())

举例:

注意:需要判断颜色是否有效,有效才继续操作

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QHBoxLayout>
#include<QLineEdit>
#include<QPushButton>
#include<QLabel>
#include<QGridLayout>
#include<QColorDialog>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr) : QWidget(parent)
    {
        resize(500,100);
        QGridLayout* grid=new QGridLayout(this);

        QPushButton* btn=new QPushButton(this);
        btn->setStyleSheet("background-color:red");
        grid->addWidget(btn,0,0);

        //点击按钮选择颜色
        connect(btn,&QPushButton::clicked,this,[=](){
            //参数1:颜色对话框的初始选择颜色
            //参数2:父窗口
            //参数3:标题
            QColor color=QColorDialog::getColor(Qt::red,this,"选择颜色");
            //需要判断颜色是否有效,有效才继续操作
            if(color.isValid())
            {
                //将选择的的颜色回显到按钮
                btn->setStyleSheet(QString("background-color:rgb(%1,%2,%3)").arg(color.red())
                                   .arg(color.green())
                                       .arg(color.blue()));
            }

        });



    }
    ~Widget()=default;
};
#endif // WIDGET_H

字体对话框

对应API

cpp 复制代码
[static] QFont QFontDialog::getFont(bool *ok, const QFont &initial, QWidget *parent = nullptr, const QString &title = QString(), QFontDialog::FontDialogOptions options = FontDialogOptions())

其使用需要先定义一个标记变量 ,来表示字体是否选择成功

举例:

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QHBoxLayout>
#include<QLineEdit>
#include<QPushButton>
#include<QLabel>
#include<QGridLayout>
#include<QFontDialog>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr) : QWidget(parent)
    {
        resize(500,100);
        QGridLayout* grid=new QGridLayout(this);

        QPushButton* btn=new QPushButton("选择字体",this);
        grid->addWidget(btn,0,0);

        QLineEdit* edit=new QLineEdit(this);
        edit->setText("你好世界!");
        grid->addWidget(edit,0,1,1,2);

        //点击按钮选择字体
        connect(btn,&QPushButton::clicked,this,[=](){
            //需要定义1个标记变量,来表示字体是否选择成功
            bool success=false;

            //参数1:标记变量
            //参数2:对画框初始默认选择的字体
            //参数3:父窗口
            //参数4:对话框标题
            QFont font=QFontDialog::getFont(&success,QFont("黑体"),this,"选择字体");
            //选择成功才继续
            if(success)
            {
                edit->setFont(font);
            }


        });



    }
    ~Widget()=default;
};
#endif // WIDGET_H

输入对话框

对应API

cpp 复制代码
//对话框里面是文本编辑框
[static] QString QInputDialog::getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)

//对话框里面是下拉框
[static] QString QInputDialog::getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)

同样需要先定义一个标记变量

举例:

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QHBoxLayout>
#include<QLineEdit>
#include<QPushButton>
#include<QLabel>
#include<QGridLayout>
#include<QInputDialog>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr) : QWidget(parent)
    {
        resize(500,100);
        QGridLayout* grid=new QGridLayout(this);

        QLineEdit* edit=new QLineEdit(this);
        edit->setText("你好世界!");
        grid->addWidget(edit,0,0,1,2);

        QPushButton* btn=new QPushButton("修改内容",this);
        grid->addWidget(btn,0,2);

        //点击按钮输入文本
        connect(btn,&QPushButton::clicked,this,[=](){
            //需要定义1个标记变量,来表示是否输入成功
            bool success=false;

            //参数1:父窗口
            //参数2:对话框标题
            //参数3:输入框上面的文本提示
            //参数4:输入框的回显模式,一般为Normal
            //参数5:输入框的初始值
            //参数6:标记变量
            QString str_input=QInputDialog::getText(
                this,
                "输入文本",
                "请输入:",
                QLineEdit::Normal,
                edit->text(),&success);
            if(success)
            {
                edit->setText(str_input);
            }
        });

        QLineEdit* edit2=new QLineEdit(this);
        edit2->setText("湖北");
        grid->addWidget(edit2,1,0,1,2);

        QPushButton* btn2=new QPushButton("修改内容",this);
        grid->addWidget(btn2,1,2);

        //点击按钮选择文本
        //输入对话框里面还可以是下拉框
        connect(btn2,&QPushButton::clicked,this,[=](){
            //需要定义1个标记变量,来表示是否输入成功
            bool success=false;

            //参数1:父窗口
            //参数2:对话框标题
            //参数3:下拉款上面的文本提示
            //参数4:下拉框里面的下拉选项列表
            //参数5:下拉框的初始选项的索引
            //参数6:下拉框的选项内容是否可以修改
            //参数7:标记变量
            QString str_input=QInputDialog::getItem(
                this,
                "选择省份",
                "请选择:",
                {"湖北","浙江","广东"},
                0,
                false,
                &success);
            if(success)
            {
                edit2->setText(str_input);
            }
        });




    }
    ~Widget()=default;
};
#endif // WIDGET_H

学习链接:https://github.com/0voice

相关推荐
做人不要太理性5 分钟前
【C++】深入哈希表核心:从改造到封装,解锁 unordered_set 与 unordered_map 的终极奥义!
c++·哈希算法·散列表·unordered_map·unordered_set
程序员-King.14 分钟前
2、桥接模式
c++·桥接模式
chnming198718 分钟前
STL关联式容器之map
开发语言·c++
程序伍六七31 分钟前
day16
开发语言·c++
小陈phd1 小时前
Vscode LinuxC++环境配置
linux·c++·vscode
火山口车神丶1 小时前
某车企ASW面试笔试题
c++·matlab
是阿建吖!1 小时前
【优选算法】二分查找
c++·算法
Ajiang28247353043 小时前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
‘’林花谢了春红‘’8 小时前
C++ list (链表)容器
c++·链表·list
----云烟----8 小时前
QT中QString类的各种使用
开发语言·qt