0

我正在尝试设计一个简单的按钮(QPushButton 或 QToolButton,两者都可以),它本质上是它所代表的颜色的矩形。单击它会打开一个 QColorDialog,然后在其中选择一种颜色会重新绘制按钮。

所以,基本上,看起来像其中之一的东西:

在此处输入图像描述

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

投币口:

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));

结果:单击前的普通按钮,选择后的细彩色轮廓。

在此处输入图像描述


尝试#2:

添加样式表:

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

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

在此处输入图像描述


我觉得我在绕着下水道转。本质上,我如何实现:

在此处输入图像描述

?

4

4 回答 4

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();
}

希望有帮助。

于 2013-02-26T04:09:07.987 回答
1

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

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

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

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

于 2013-02-26T18:04:47.747 回答
0

这对我来说似乎工作得很好:

if(colorSelected.isValid())
{
    ui->buttonColor->setPalette(QPalette(colorSelected));
}
于 2013-02-26T08:41:25.093 回答
0

作为 phyatt 回答的后续,有一个快捷方式可以生成 XML 格式的颜色字符串:

QString s("background: " + color.name + ";");
button->setStyleSheet(s);
于 2016-12-25T17:53:10.030 回答