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~

相关推荐
Decay__2 小时前
SQL Server 数据库全栈运维实战系列 — 合集索引(24 篇)
运维·数据库·sql·mysql·架构
天天被压力2 小时前
【A股分钟级高频数据完全手册 #11】券商实时行情数据接口:实时交易(券商源)接入与字段
java·人工智能·python
Thanks_ks3 小时前
SQL 的 GROUP BY 与聚合函数:从会写 SELECT 到会做统计
数据库·sql·mysql·group by·数据统计·聚合函数·having
天天被压力3 小时前
【A股分钟级高频数据完全手册 #12】股票五档盘口数据接口:买卖五档实时盘口解析
java·人工智能·python
Decay__11 小时前
12_MySQL InnoDB 内存与锁调优 —— Buffer Pool、redo log、隔离级别与锁等待
运维·数据库·sql·mysql·架构
笃行35011 小时前
AI数据库的库内四层结构,KingbaseES 产品拆解
数据库
Wang's Blog12 小时前
Java 项目实战: 交友项目 - FastDFS:入门案例
java·开发语言·交友
apcipot_rain12 小时前
C++转Java日记(03)
java·开发语言·c++
皮皮林55112 小时前
Java实现微信扫码登录
java
我是大猴子13 小时前
redis
数据库·redis·缓存