在QT中通过qss定位QPushButtons

时间:2011-09-22 19:31:35

标签: c++ css qt

我有一组五个按钮,我试图在qss文件中定位。我在ui文件中设置的默认位置适用于我需要的其中一个布局。但是,我想在另一个主题中对按钮进行不同的分组。

我是qss文件的新手,并且一直在尝试,但无法弄清楚是否有可能。 “left”属性在这里定义:http://doc.qt.io/archives/4.6/stylesheet.html#left-attr但是当我尝试使用它时没有任何反应。

margin-left实际上会移动按钮,但只是关系。因此,如果按钮位于ui文件中,它们之间的间隙为100,则列表中第二个按钮的左边距偏移100.

我做错了什么?可能是ui文件中的一些设置阻止它移动?我已经“打破了布局”,这似乎并不重要。你建议有一个很好的资源吗?

以下是我的qss文件示例。左边没有效果。

QPushButton#Button_1 
{       
    min-width: 50;
    max-width: 50;
    min-height: 50;
    max-height: 50; 
    position:absolute;
    subcontrol-origin: border;  
    left:200;
}

编辑: 我已经发现我可以通过从QPushButton派生一个类并创建一个“GeomX”qproperty来改变按钮的位置。这似乎有效,但我现在遇到一个奇怪的问题。当我第一次加载我的应用程序时,它会绘制按钮,因为它们位于ui文件上。当我使用我编码的“更改主题”选项,并选择当前加载的主题时,它按照我的预期移动按钮。但是,调整应用程序大小会将它们转储回ui位置并重新启动也会将它们放回到ui位置。 ui文件中是否有可以更改的设置以使其停止移动它们?是否存在我需要解决的加载顺序问题?是否有可能解决这个问题?发生了什么事?

1 个答案:

答案 0 :(得分:1)

一般来说,Qt中的样式表用于改变窗口小部件的绘制方式,而不是它的位置(除了添加填充/边距)。作为您引用的文档,“左”属性特定于子控件(即窗口小部件中的组件,而不是窗口小部件本身)。

你想要完成的事情(根据主题改变布局)可能需要采用不同的方法。有两种选择可以通过以下方式对主题进行更改做出反应:

  • 在布局中移动您的垫片,将按钮移动到所需位置
  • 使用堆叠小部件,堆栈中的一个页面用于您想要的每个布局,并根据您正在使用的主题更改您正在显示的堆栈中的哪个页面。