文章目录
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~