【发布时间】:2019-11-26 14:16:18
【问题描述】:
考虑以下示例。它创建了QComboBox 的两个实例:一个带有样式表,另一个没有。如果单击第一个(小部件样式为 Fusion),则菜单按预期调整大小,尽管悬停项和非悬停项之间的文本填充不一致。但是如果你点击第二个,padding 问题现在已经解决了,但是菜单看起来有很大的条目,使得菜单填满了整个屏幕的高度。
#include <QComboBox>
#include <QApplication>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QComboBox box1, box2;
const QString stylesheetOrig=R"(
QComboBox::item:selected
{
background-color: #0000ff;
}
)";
box1.setStyleSheet(stylesheetOrig);
box2.setStyleSheet(stylesheetOrig+R"(
QComboBox::item
{
padding-left: 27px;
}
)");
box1.addItems({"Hello 1","Goodbye 1"});
box2.addItems({"Hello 2","Goodbye 2"});
box1.show();
box2.show();
return app.exec();
}
如果我删除填充语句,仍然留下 QComboBox::item {} 部分,那么不会发生任何奇怪的事情(也不会发生任何有用的事情)。但是,如果我什至将填充设置为 1px 或 0px,则拉伸已经尽其所能发生了。
为什么设置horizontal padding 会导致垂直方向如此奇怪的变化?
【问题讨论】:
-
QWidget:item应该是什么? QWidget 上没有这样的子控件(也许您正在考虑QAbstractItemView::item?)此外,控件通常与::分隔,而状态与:分隔。 -
@MaximPaperno 其实好像是笔误,应该有
::。它只是采用与我正在编辑的代码QWidget:item:selected { background-color: #0000ff; }中先前存在的形式相同的形式(使用另一种颜色)。这导致组合框中的当前活动项目,除了菜单中的背景外,悬停时还有一个勾号,并且任何悬停项目上的文本都缩进 - 与未悬停的项目不一致,我试图找到补救措施.如果QWidget中没有这样的子控件,我不确定为什么这仍然有效... -
好的,显然
QCheckBox::item确实适用于列表视图中的项目,即使我没有看到它记录在任何地方,并明确覆盖项目视图上设置的任何样式(以奇怪的方式,即使docs 说要做到这一点)。我的猜测是QWidget::item有效,因为组合框继承自它......啊,QSS 的奥秘! :) 我可以用填充重现这个问题——不知道这是怎么回事,但它确实把几何计算搞砸了。但是发布一个带有这个图标/勾选行为的完整示例。 -
@MaximPaperno 好的,更新样式表并将其本地化为
QComboBox而不是QWidget(具有相同的行为)。 -
我的意思是发布一个图标/复选标记或其他实际问题的示例(不确定我是否理解该部分,图标来自哪里?)。 CSS 填充很明显是一个错误或其他一些“异常”,我们可以花费all day 追查——我建议专注于解决您想要解决的实际问题。或者等着看之前是否有人遇到过这个确切的问题。