2012-07-31 199 views
6

我有两个自定义样式的QPushButton按钮。下面是Ok按钮样式表:QPushButton视觉问题

QPushButton 
{ 
    background-color:#9dce2c; 
    border-radius:7px; 
    border:1px solid #83c41a; 
    color:#ffffff; 
    font-size:15px; 
    font-weight:bold; 
    padding:4px 24px; 
    text-decoration:none; 
} 
QPushButton:pressed 
{ 
    border:2px solid black; 
} 

现在,这里是什么样子:

Ok button

这是罚款。但是,如果单击该按钮(获得焦点),它开始是这样的:

Ok button focused

注意周围的文字略有阴影矩形。看起来好像文本正在“被选中”。当按钮失去焦点时,它再次开始看起来正常。我想这是因为所选择的控制得到强调这样的:

enter image description here

不过,我想我的按钮保持不变,无论无论是集中与否。有什么办法可以解决这个问题吗?

+0

覆盖paintEvent – Rolle 2012-07-31 06:47:27

回答

3

找到解决方案。原来是很简单

该问题确实是由按钮接收焦点造成的。我所需要做的就是将按钮的focusPolicy属性设置为NoFocus。它可以在QtDesigner做到无论:

enter image description here

或代码:

ui.okButton->setFocusPolicy(Qt::NoFocus);

它完成后,按钮上的点击就无法使其获得焦点,和外观不会改变。

+3

您可能会在行为上稍有不同 - 当您专注于按钮你可以通过Space按键来按下它,但这一切都取决于你需要的东西。就我个人而言,我一直喜欢键盘可以使用的图形用户界面,很糟糕,以至于开发人员现在忽略了这个特性:(。 – kolenda 2012-07-31 10:01:05

+0

@Kolenda,是,我意识到这一点,我在表单中有一个'QLineEdit',用户将用它来输入他的东西,我将在这个'QLineEdit'中跟踪'Enter'命中,并在这种情况发生时强制按下按钮 – SingerOfTheFall 2012-07-31 10:06:10

+0

@Kolenda,虽然这是一个很好的观点,但是我觉得非常令人失望,因为不能够通过'enter'来完成填充。 – SingerOfTheFall 2012-07-31 10:07:03

0

我没有尝试,但我认为你可以通过将QPushButton:hover设置为与QPushButton相同的样式来解决该问题。有一些默认样式可以让按钮悬停在红色上,你只需要找出它是哪一个(可能是hover)并覆盖它。

+0

它在悬停时不会变红。它在点击后变得如此,直到点击任何其他控件。 – SingerOfTheFall 2012-07-31 07:54:02

+0

@SingerOfTheFall,对,然后尝试'QPushButton:focus'状态。 – 2012-07-31 07:56:37

+0

刚刚尝试过,没有帮助=( – SingerOfTheFall 2012-07-31 08:01:28

3

这消除了橙色矩形:

QPushButton:focus { 
    outline: none; 
} 

PS:你应该尽量添加一些样式到焦点状态就像变了一个背景色,使这种状态保持“可见”给用户。