Qt颜色选择编辑demo

点击右侧toolButton可以弹出QColorDialog颜色选择面板,


选择好颜色后,编辑面板中的label背景颜色将会改变,lineEdit将会显示颜色的名字。


在这里,按钮使用的是QToolButton而不是QPushButton,原因是QToolButton相对更加灵活,应为它不像QPushButton那样有自己的固定的外观策略,

它会随着外部布局器的大小来灵活的调整自己本身的大小。


其中lineEdit设置为不可编辑模式,因为QLineEdit没有setEdit接口,所以始终下面不可设置焦点的方式来禁止其编辑功能。

 lineEdit->setFocusPolicy(Qt::NoFocus);

coloreditwidget.h
class ColorEditWidget:public QWidget
{
    Q_OBJECT
public:
    ColorEditWidget();
    ~ColorEditWidget();

    void setColor(const QColor &c)
    {
        if(c.isValid())
        {
            color=c;
            label->setStyleSheet(QString("background-color:%1").arg(color.name()));
            lineEdit->setText(color.name());
        }
    }
    QColor getColor()
    {
        return color;
    }
private slots:
    void slotButtonClicked();
private:
    void ui();
    void initialize();


    QColor color;
    QLabel*label;
    QLineEdit *lineEdit;
    //    QPushButton *button;
    QToolButton *button;
};

coloreditwidget.cpp
<pre name="code" class="cpp">ColorEditWidget::ColorEditWidget()
{
    ui();
    initialize();
}

ColorEditWidget::~ColorEditWidget()
{
    
}

void ColorEditWidget::slotButtonClicked()
{
    QColor c=QColorDialog::getColor(color);
    if(c.isValid())
    {
        color=c;
        
        label->setStyleSheet(QString("background-color:%1").arg(color.name()));
        lineEdit->setText(color.name());
    }
}

void ColorEditWidget::ui()
{
    label=new QLabel;
    lineEdit=new QLineEdit;
    //    button=new QPushButton(this);
    button=new QToolButton;
    
    QHBoxLayout *layout=new QHBoxLayout;
    layout->setMargin(0);
    layout->addWidget(label);
    layout->addWidget(lineEdit,1);
    layout->addWidget(button);
    
    setLayout(layout);
    
    this->setAutoFillBackground(true);
    QPalette palette;
    palette.setColor(QPalette::Background, Qt::white);
    this->setPalette(palette);
}

void ColorEditWidget::initialize()
{
    color=Qt::green;
    
    label->setFixedWidth(30);
    label->setStyleSheet(QString("background-color:%1").arg(color.name()));
    
    lineEdit->setText(color.name());
    lineEdit->setFocusPolicy(Qt::NoFocus);
    
    button->setText("...");
    
    connect(button,SIGNAL(clicked()),this,SLOT(slotButtonClicked()));
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值