我正在尝试设计一个简单的按钮(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);
结果:点击前黑色矩形,选择后黑色矩形。
我觉得我在盘旋。基本上,我如何实现:
答案 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);