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~

相关推荐
神明不懂浪漫5 分钟前
【第四章】索引——B+树、回表,加快数据库的查找能力的利器
开发语言·数据结构·数据库·经验分享·笔记·b树
霸道流氓气质12 分钟前
Spring AI Alibaba 系列总结:Java 工程师 AI 能力全景图谱
java·人工智能·spring
二十雨辰30 分钟前
[Java]-场景题
java·开发语言
MZA66634 分钟前
Spring Boot 实战:基于自定义注解 + AOP 实现 Kafka 消息无侵入异步上送
java·spring boot·kafka
我是大猴子35 分钟前
为什么SSE无法代替Webscoket
java
重庆小透明40 分钟前
Kafka 完全指南:从基础组件到核心原理(包含面试题)
java·分布式·微服务·架构·kafka
zcmodeltech1 小时前
智慧矿山沙盘模型多场景控制系统设计——基于STM32与Modbus RTU的智能开采、无人矿卡、数字孪生全场景联动方案
数据库·stm32·单片机·嵌入式硬件·物联网
CodeStats1 小时前
【Java文件IO】Java 文件 IO 体系深度拆解(中):NIO API 详解、Files 与 FileChannel 巅峰对决
java·io·文件·nio·零拷贝·mmap
小码过河.1 小时前
ocean自增主键模式说明
数据库·oracle