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~

相关推荐
涛声依旧393161 小时前
运维项目:InnoAI SQL 助手
运维·数据库·sql
万悉科技1 小时前
时尚品牌GEO技术选型指南:LLM原生优化与AI记忆构建全解析
数据库·人工智能·搜索引擎
lb29172 小时前
在window上安装orcale数据库流程(快速,简洁)
数据库
IT小盘2 小时前
09-使用Redis保存大模型多轮对话上下文
数据库·redis·缓存
秋田君2 小时前
QT_QT布局常用类QSplitter窗口分割类与QDockWidget窗口停靠类
开发语言·数据库·qt
小果因子实验室2 小时前
策略研究--qmt实现新股自动申购卖出策略
数据库
用户91366296220122 小时前
ViewModelScope 简介与使用
java
上海安当技术2 小时前
老系统零改造接入:旁路代理统一认证实战
java·servlet·架构·kubernetes·jenkins
Darling噜啦啦2 小时前
从零实战Milvus向量数据库:用RAG打造你的AI日记助手
数据库