QSpinBox箭头放在行编辑器外面(CSS)

4

image
(来源:metrotek.spb.ru)

如何使用Qt CSS来实现?

我已经尝试使用

subcontrol-origin: margin;
position: absolute;

但是没有成功。

感谢任何帮助。

编辑

谢谢您的帮助,我的问题的最终CSS是:

QSpinBox#spin {
margin-left: 20px;  /* make room for the arrows */
margin-right: 20px;  /* make room for the arrows */
width: 20px;

border: 2 solid #515151;
background-color: #434343;
}

QSpinBox#spin::up-button  {
subcontrol-origin: margin;
subcontrol-position: center left;

width: 19px;
border-width: 1px;
}

QSpinBox#spin::up-arrow  {
image: url(:/res/images/up.png);

min-width: 19px;
min-height: 14px;
max-width: 19px;
max-height: 14px;
height: 19px;
width: 14px;
}

QSpinBox#spin::up-button:pressed  {
top: 1px;
right: 1px;
}

QSpinBox#spin::down-button  {
subcontrol-origin: margin;
subcontrol-position: center right;
width: 19px;
border-width: 1px;
}

QSpinBox#spin::down-arrow  {
image: url(:/res/images/down.png);

min-width: 19px;
min-height: 14px;
max-width: 19px;
max-height: 14px;
height: 19px;
width: 14px;
}

QSpinBox#spin::down-button:pressed  {
top: 1px;
left: 1px;
}

并且还有额外的CSS作为奖励 :) 如果你想在编辑器右侧设置箭头的位置为“向上,向下”:

QSpinBox#spin {
margin-right: 40px;  /* make room for the arrows */
width: 20px;

border: 2 solid #515151;
background-color: #434343;
}

QSpinBox#spin::up-button  {
subcontrol-origin: margin;
subcontrol-position: center right;
position: relative;

left: -20px;   /*   shift position back*/
width: 19px;
border-width: 1px;
}

QSpinBox#spin::down-button  {
subcontrol-origin: margin;
subcontrol-position: center right;
width: 19px;
border-width: 1px;
}
1个回答

3

您是否查看过Qt样式表指南?他们提供了一个非常具体的示例,说明如何定位您的上下箭头:

这里是链接

QSpinBox {
     padding-right: 15px; /* make room for the arrows */
     border-image: url(:/images/frame.png) 4;
     border-width: 3;
 }

 QSpinBox::up-button {
     subcontrol-origin: border;
     subcontrol-position: top right; /* position at the top right corner */

     width: 16px; /* 16 + 2*1px border-width = 15px padding + 3px parent border */
     border-image: url(:/images/spinup.png) 1;
     border-width: 1px;
 }

 QSpinBox::down-button {
     subcontrol-origin: border;
     subcontrol-position: bottom right; /* position at bottom right corner */

     width: 16px;
     border-image: url(:/images/spindown.png) 1;
     border-width: 1px;
     border-top-width: 0;
 }

只需调整子控件的位置。还要调整QSpinBox的填充,以使其左侧也有填充。


我们在哪里可以找到这些图片? - Chris P
@ChrisP 你需要提供自定义图片。请阅读Qt样式表参考中关于图片、URL和Qt资源系统的内容:https://doc.qt.io/qt-6/stylesheet-reference.html#url - jdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接