QT_QColorDialog颜色对话框

文章目录

QT_QColorDialog颜色对话框

QColorDialogQt 提供的标准颜色选择对话框,允许用户通过图形界面直观地选择颜色。它继承自 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~

相关推荐
chuan.bai1 小时前
Java RAG 实战(第 11 篇):RAG 知识工作台网页
java·开发语言·人工智能
0x534 小时前
网站通信(一)
java
Terra.K4 小时前
Java异常学习[特殊字符]
java·开发语言·学习
葡萄城技术团队5 小时前
InfluxDB 2\.x 深度解析:核心架构、Flux 函数与制造业落地指南(三)
java·开发语言·架构
Super 含6 小时前
Android 启动优化(五):线程、GC 与 IO 为什么会拖慢启动?
java·服务器·数据库
counting money6 小时前
Java IO流详解:从InputStream到文件操作实战
java·开发语言·python
ltl6 小时前
向量检索引擎选型:决策树、RAG 回链与开放问题
数据库
坚持学习前端日记6 小时前
Python SQLAlchemy ORM 从0到1精通实战手册(基础到复杂高阶)
数据库·python·oracle
灯澜忆梦6 小时前
【MySQL17】进阶篇 | InnoDB引擎
数据库·mysql
程序员小八7776 小时前
上海百度B端java后端日常实习一面
java·开发语言