布局对话框

QColorDialog(颜色对话框)

QColorDialog 是 Qt 框架中标准的颜色选择对话框组件,隶属于 QDialog 子类,专为图形界面中选择颜色设计,支持跨平台(Windows/macOS/Linux)、原生系统样式适配、多颜色模式(RGB/HSV/CMYK)和 Alpha 透明度通道,是 Qt 界面开发中最常用的对话框之一。

静态方法 QColorDialog::getColor()(最常用)

Qt 封装了静态方法 getColor(),一键弹出模态颜色对话框,无需手动创建对象,返回选中的 QColor(用户取消则返回无效 QColor)。

QColor color = QColorDialog::getColor(Qt::red,this , "选择背景颜色");
    if(color.isValid()){
        frame->setPalette(QPalette(color));
    }

QFrontDialog(字体对话框)

QFontDialog 是 Qt 提供的标准字体选择对话框,隶属于 QDialog 子类,用于让用户选择字体(如宋体 / 微软雅黑)、字号(12/14/16px)、字体样式(粗体 / 斜体 / 下划线)、字符间距等,跨平台适配系统原生字体面板样式,是 Qt 界面中设置文本字体的核心组件。

静态方法 QFontDialog::getFont()(最常用)

一键弹出模态字体对话框,返回选中的 QFont,用户取消则返回无效字体

必须传指针,用于判断用户是否点击 “确定”(QColorDialog 用 isValid()QFontDialog布尔类型指针,这是核心区别)

void Dialog::dispFontFunc()
{
    bool ok;
    QFont font = QFontDialog::getFont(&ok);
    if(ok){
        lineEdit->setFont(font);
    }
}

QInputDialog(输入对话框)

QInputDialog 是 Qt Widgets 模块中封装度极高的 “即插即用” 输入对话框,本质是 Qt 对 “输入控件 + 对话框容器 + 交互逻辑” 的一层封装,核心目标是让开发者用最少的代码实现 “获取单个输入值” 的需求。

QInputDialog::getText()

static QString getText(
    QWidget *parent,                // 父窗口( nullptr 则居中屏幕)
    const QString &title,           // 对话框标题
    const QString &label,           // 输入提示文本
    QLineEdit::EchoMode echo = QLineEdit::Normal,  // 回显模式
    const QString &text = QString(),// 默认输入值
    bool *ok = nullptr,             // 确认状态指针
    Qt::WindowFlags flags = Qt::Widget,  // 窗口标志(如置顶、无边框)
    Qt::InputMethodHints inputMethodHints = Qt::ImhNone  // 输入法提示
);

QInputDialog::getInt()

static int getInt(
    QWidget *parent,
    const QString &title,
    const QString &label,
    int value = 0,                  // 默认值
    int minValue = -2147483647,     // 最小值(默认int最小值)
    int maxValue = 2147483647,      // 最大值(默认int最大值)
    int step = 1,                   // 步长(上下箭头/滚轮增量)
    bool *ok = nullptr,
    Qt::WindowFlags flags = Qt::Widget
);

QInputDialog::getDouble()

static double getDouble(
    QWidget *parent,
    const QString &title,
    const QString &label,
    double value = 0.0,             // 默认值
    double minValue = -2147483647.0,// 最小值
    double maxValue = 2147483647.0, // 最大值
    int decimals = 1,               // 显示的小数位数
    bool *ok = nullptr,
    Qt::WindowFlags flags = Qt::Widget
);

QInputDialog::getItem()

static QString getItem(
    QWidget *parent,
    const QString &title,
    const QString &label,
    const QStringList &items,       // 下拉选项列表
    int current = 0,                // 默认选中索引(从0开始)
    bool editable = true,           // 选项是否可编辑
    bool *ok = nullptr,
    Qt::WindowFlags flags = Qt::Widget,
    Qt::InputMethodHints inputMethodHints = Qt::ImhNone
);

 示例:

void Dialog::modifyStudentNoFunc()
{
    bool ok = false;
    QString str = QInputDialog::getText(this,
                                        "标准输入对话框",
                                        "请输入学号:",
                                        QLineEdit::Normal,
                                        inputStudentNoLineEdit->text(),
                                        &ok);
    if(ok){
        qDebug() << str;
        inputStudentNoLineEdit->setText(str);
    }
}

void Dialog::modifyStudentSexFunc()
{
    bool ok = false;
    QStringList lists;
    lists << "男" << "女";//往lists里添加元素
    QString sex = QInputDialog::getItem(this,
                                        "标准输入对话框",
                                        "请选择性别:",
                                        lists,
                                        0,
                                        false,
                                        &ok);
    if(ok){
        inputStudentSexLineEdit->setText(sex);
    }
}

void Dialog::modiffStudentScoreFunc()
{
    bool ok = false;
    double score = QInputDialog::getDouble(this,
                                     "标准输入对话框",
                                     "请输入分数:",
                                     60,
                                     0,//初始值
                                     100,
                                     1,//步长
                                     &ok);
    if(ok){
        inputStudentScoreLineEdit->setText(QString::number(score, 'f', 3));
    }
}

 QMessageBox(消息对话框)

QMessageBox 是 Qt Widgets 模块中封装度极高的 “即插即用” 消息对话框类,专为快速展示提示、警告、错误、询问等消息设计,无需手动构建对话框 + 按钮 + 布局,是 Qt 开发中 “人机交互反馈” 的核心工具

常用的消息对话框;
QMessage::waring()

static StandardButton warning(
    QWidget *parent,
    const QString &title,
    const QString &text,
    StandardButtons buttons = Ok,
    StandardButton defaultButton = NoButton
);

QMessage::information()

static StandardButton information(
    QWidget *parent,                // 父窗口(nullptr 居中屏幕)
    const QString &title,           // 对话框标题
    const QString &text,            // 核心消息文本
    StandardButtons buttons = Ok,   // 显示的按钮(默认仅 OK)
    StandardButton defaultButton = NoButton  // 默认聚焦的按钮
);

QMessage::critical()

static StandardButton critical(
    QWidget *parent,
    const QString &title,
    const QString &text,
    StandardButtons buttons = Ok,
    StandardButton defaultButton = NoButton
);

 自定义消息对话框

void Dialog::customMeg()
{
    QMessageBox messbox;//创建对话框
    messbox.setWindowTitle("自定义消息框");//设置对话框标题
    QPushButton *yes = messbox.addButton("确认", QMessageBox::YesRole); //增加按钮
    QPushButton *no = messbox.addButton("取消", QMessageBox::ActionRole);
    messbox.exec();//启动对话框

    //判断点击类型
    if(messbox.clickedButton() == yes){
        qDebug() << "我点击了yes";
    }
}

 

posted @ 2025-12-25 20:01  菜鸡の编程日常  阅读(4)  评论(0)    收藏  举报