2011-09-22 133 views
0

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

我是新来的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

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

听起来你想要完成的事情(根据主题改变布局)可能需要不同的方法。一对夫妇的选择将是反应时主题的变化:在堆栈

  • 周围的间隔移动在布局的按钮移动到需要的位置
  • 使用堆叠部件,一个页面您希望的每种布局,并根据您使用的主题更改显示的堆栈中的哪个页面。