QT_QColorDialog颜色对话框

文章目录

QT_QColorDialog颜色对话框

QColorDialog 是 Qt 提供的标准颜色选择对话框,允许用户通过图形界面直观地选择颜色。它继承自 QDialog,支持 RGB/HSL 输入、屏幕取色器、自定义颜色等功能。

两种使用方式

静态方法(最常用、最简洁)

直接调用 getColor() 弹出模态对话框,阻塞程序直到用户选择或取消:

cpp 复制代码
QColor color = QColorDialog::getColor(
    Qt::white,            // 初始颜色
    this,                 // 父窗口
    "选择颜色",            // 对话框标题
    QColorDialog::ShowAlphaChannel // 可选:显示透明度通道
);

if (color.isValid()) {
    // 用户点击了"确定",使用选中的颜色
    qDebug() << "选择的颜色:" << color.name(); // 输出如 #ff0000
} else {
    // 用户点击了"取消"
    qDebug() << "用户取消了选择";
}

必用 color.isValid() 判断用户是否确认选择。用户点击"取消"时返回的是无效 QColor();

实例化对象(更灵活)

创建 QColorDialog 实例,可自定义颜色、选项,并通过信号槽交互:

cpp 复制代码
QColorDialog *dialog = new QColorDialog(this);
dialog->setCurrentColor(Qt::blue);                    // 设置初始颜色
dialog->setOption(QColorDialog::ShowAlphaChannel);    // 显示透明度

// 连接信号:用户实时改变颜色时触发
connect(dialog, &QColorDialog::currentColorChanged, this, [](const QColor &color) {
    qDebug() << "实时颜色变化:" << color.name();
});

// 连接信号:用户点击"确定"时触发
connect(dialog, &QColorDialog::colorSelected, this, [](const QColor &color) {
    qDebug() << "最终确认颜色:" << color.name();
});

dialog->exec(); // 模态显示

常用方法一览

方法 说明
getColor() 静态方法,弹出对话框并返回颜色(模态)
setCurrentColor(const QColor &) 设置当前颜色
currentColor() 获取当前选择的颜色
selectedColor() 获取最终确认的颜色(点击"确定"后有效)
exec() 模态显示(阻塞)
open() 非模态显示(不阻塞)
setCustomColor(int index, QRgb color) 设置自定义颜色(最多16个)

常用选项(QColorDialog::Option)

枚举值 说明
ShowAlphaChannel 显示透明度(Alpha)通道滑块
NoButtons 不显示"确定/取消"按钮
DontUseNativeDialog 不使用系统原生对话框,使用 Qt 自绘界面(跨平台表现一致)

使用案例

代码

dialog.h代码

cpp 复制代码
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QFrame>
#include <QColorDialog>
#include <QGridLayout>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();
private:
    QGridLayout * glayout;
    QPushButton* colorButton;
    QFrame* colorFrame;

private slots:
    void displayColorFunc();
};
#endif // DIALOG_H

dialog.cpp代码

cpp 复制代码
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(u8"颜色对话框测试");
    glayout = new QGridLayout(this);
    colorButton = new QPushButton(u8"请选择颜色");
    colorFrame = new QFrame;
    colorFrame->setFrameShape(QFrame::Box);
    colorFrame->setAutoFillBackground(true);

    glayout->addWidget(colorButton, 0, 0);
    glayout->addWidget(colorFrame, 1, 0);
    connect(colorButton, SIGNAL(clicked()), this, SLOT(displayColorFunc()));

}

Dialog::~Dialog()
{
}

void Dialog::displayColorFunc() {
    QColor colorValues = QColorDialog::getColor(Qt::red);
    if (colorValues.isValid()) {
        colorFrame->setPalette(QPalette(colorValues));
    }
}

效果


end~

相关推荐
笃行3506 分钟前
数据集成软件里最贵的一行字,叫“用同步工具做增量同步“
数据库
吴声子夜歌6 分钟前
Docker入门与实战——Etcd(高可用的键值数据库)
数据库·docker·etcd
刘 大 望10 分钟前
Agent 的规划与执行范式:Plan-Execute-Replan 与 ReAct
java·python·ai·chatgpt·langchain·ai编程
qq_白羊座43 分钟前
Hologres / PostgreSQL jsonb 常用函数 & 操作符对照表
数据库·postgresql
千桐科技44 分钟前
qData 数据中台专业版功能解析:告别 Excel 与 SQL 拼凑,打通系统合并的可追踪数据链路
数据库·sql·excel·qdata
const_qiu1 小时前
第四章 05:4.5 Multi-Agent —— 五个专职智能体协作
java·人工智能
Cx330❀1 小时前
深入浅出 Qt 绘图机制:从 QPainter 到四大图像类解析
开发语言·qt·ui·性能优化·图形渲染
A小码哥1 小时前
大模型成本怎么降,5 个动作先做前两个
java·前端·spring
鬼手点金1 小时前
构建有效 Agent 的核心原则
java·人工智能·git·学习·自动化
神魔皆以血嗜1 小时前
Java 实现简单状态机(订单状态流转)
java·后端