在Qt中着色一个按钮

时间:2013-02-26 02:39:28

标签: qt qt-creator

我正在尝试设计一个简单的按钮(QPushButton或QToolButton,或者可以工作),它基本上是它所代表的颜色的矩形。单击它将打开一个QColorDialog,并选择其中的颜色重新绘制按钮。

所以,基本上,这看起来像其中之一:

enter image description here

我做了几次尝试,但都没有给我带来我想要的功能。

插槽:

void MainWindow::OnButtonColorClick()
{
    QColor initialColor = ui->buttonColor->palette().color(QPalette::Background);

    QColor colorSelected = QColorDialog::getColor(initialColor, this);

    if(colorSelected.isValid())
    {
        ui->buttonColor->setPalette(QPalette(colorSelected));
        ui->buttonColor->setAutoFillBackground(true);
    }
}

尝试#1:

在构造函数中设置Palette:

ui->buttonCoulor->setPalette(QPalette(Qt::black));

结果:点击前的普通按钮,选择后的薄色轮廓。

enter image description here


尝试#2:

添加样式表:

background-color: rgb(0, 0, 0);

结果:点击前黑色矩形,选择后黑色矩形。

enter image description here


我觉得我在盘旋。基本上,我如何实现:

enter image description here

4 个答案:

答案 0 :(得分:3)

这是实现预期效果的一种方法:

// Slot for the button
void MainWindow::on_button()
{
    QColor color = QColorDialog::getColor();

    QString s("background: #"
                          + QString(color.red() < 16? "0" : "") + QString::number(color.red(),16)
                          + QString(color.green() < 16? "0" : "") + QString::number(color.green(),16)
                          + QString(color.blue() < 16? "0" : "") + QString::number(color.blue(),16) + ";");
    button->setStyleSheet(s);
    button->update();
}

希望有所帮助。

答案 1 :(得分:1)

将setStyleSheet与此样式表一起使用:

border: 1px solid black;
background-color: #XXXXXX;

其中XXXXXX是QString::number(myColor.rgb(), 16).toUpper();

返回的值

无需在按钮上设置任何其他属性。将它们全部保留为默认值,这将有效。

答案 2 :(得分:0)

这对我来说似乎很合适:

if(colorSelected.isValid())
{
    ui->buttonColor->setPalette(QPalette(colorSelected));
}

答案 3 :(得分:0)

作为phyatt答案的后续内容,有一条生成XML格式颜色字符串的快捷方式:

QString s("background: " + color.name + ";");
button->setStyleSheet(s);