十七、颜色对话框

十七、颜色对话框QColorDialog

实现以下功能

创建一个QDialog工程

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

#include<QPushButton>
#include<QFrame>
#include<QColorDialog>
#include<QGridLayout>

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

private:
    Ui::Dialog *ui;

    QGridLayout *gl;
    QPushButton *colorButton;
    QFrame *colorFrame;

private slots:
    void colorFunc();
};
#endif // DIALOG_H

 dialog.cpp

首先实例化对象,并设置简单的布局

    gl=new QGridLayout(this);
    colorButton=new QPushButton("调用颜色对话框");
    colorFrame=new QFrame();

    colorFrame->setFrameShape(QFrame::Box);
    colorFrame->setAutoFillBackground(true);

    gl->addWidget(colorButton,0,0);
    gl->addWidget(colorFrame,0,1);


void setFrameShape(QFrame::Shape):

此属性保存来自框架样式的框架形状值


 


void setAutoFillBackground(bool enabled):

此属性保留小部件背景是否自动填充
如果启用,此属性将导致Qt在调用paint事件之前填充小部件的背景。使用的颜色由小部件调色板中的QPalette::Window颜色角色定义。
此外,Windows总是被QPalette::Window填充,除非设置了WA_OpaquePaintEvent或WA_NoSystemBackground属性。

如果小部件的父类具有静态渐变背景,则此属性不能关闭(即设置为false)。
警告:与Qt样式表一起谨慎使用此属性。当小部件具有具有有效背景或边框图像的样式表时,此属性将自动禁用。
默认情况下,此属性为false。
 

设置槽函数

void Dialog::colorFunc()
{
    QColor color=QColorDialog::getColor(Qt::red);

    if(color.isValid())
    {
        colorFrame->setPalette(QPalette(color));
    }
}

QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions()):

弹出一个带有给定窗口标题的模态颜色对话框(如果没有指定,则为“Select color”),让用户选择颜色,并返回该颜色。颜色最初设置为initial。对话框是parent的子窗体。如果用户取消对话框,它将返回一个无效的颜色(参见QColor::isValid())。
options参数允许您自定义对话框。

bool QColor::isValid() const:

如果颜色有效则返回true;否则返回false。


void setPalette(const QPalette &):

此属性保存小部件的调色板
此属性描述小部件的调色板。在呈现标准组件时,小部件的样式使用该调色板,并且可以作为确保自定义小部件能够与本机平台的外观保持一致性的一种手段。不同的平台或不同的风格有不同的调色板是很常见的。

当您将新调色板分配给小部件时,该调色板中的颜色角色将与小部件的默认调色板组合在一起,形成小部件的最终调色板。小部件背景角色的调色板条目用于填充小部件的背景(参见QWidget::autoFillBackground),前台角色初始化QPainter的笔。

默认值取决于系统环境。QApplication维护一个系统/主题调色板,作为所有小部件的默认选项。对于某些类型的小部件,也可能有特殊的默认调色板(例如,在Windows Vista上,所有派生自QMenuBar的类都有一个特殊的默认调色板)。您还可以通过向QApplication::setPalette()传递一个自定义调色板和一个小部件的名称来为小部件定义默认的调色板。最后,样式总是有抛光调色板的选项,因为它被分配(参见QStyle::polish())。

QWidget将显式调色板角色从父角色传播到子角色。如果您将画笔或颜色分配给调色板上的特定角色,并将该调色板分配给小部件,则该角色将传播到小部件的所有子部件,覆盖该角色的任何系统默认值。请注意,默认情况下调色板不会传播到窗口(参见isWindow()),除非Qt::WA_WindowPropagation属性被启用。
QWidget的调色板传播与其字体传播类似。

当前的样式用于呈现所有标准Qt小部件的内容,可以自由地从小部件调色板中选择颜色和笔刷,或者在某些情况下,忽略调色板(部分地或完全地)。特别是,某些样式,如GTK样式、Mac样式和Windows Vista样式,依赖于第三方api来呈现小部件的内容,这些样式通常不遵循调色板。因此,为小部件的调色板分配角色并不能保证改变小部件的外观。相反,您可以选择应用样式表。

警告:不要将此函数与Qt样式表结合使用。当使用样式表时,可以使用“color”、“background-color”、“selection-color”、“selection-background-color”和“alternate-background-color”自定义小部件的调色板。

完整代码

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);

    gl=new QGridLayout(this);
    colorButton=new QPushButton("调用颜色对话框");
    colorFrame=new QFrame();

    colorFrame->setFrameShape(QFrame::Box);
    colorFrame->setAutoFillBackground(true);

    gl->addWidget(colorButton,0,0);
    gl->addWidget(colorFrame,0,1);

    connect(colorButton,&QPushButton::clicked,this,&Dialog::colorFunc);

}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::colorFunc()
{
    QColor color=QColorDialog::getColor(Qt::red);

    if(color.isValid())
    {
        colorFrame->setPalette(QPalette(color));
    }
}

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mo Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值