【问题标题】:QPushButton visual issueQPushButton 视觉问题
【发布时间】:2012-07-28 21:13:26
【问题描述】:

我有两个自定义样式的QPushButton 按钮。这是Ok 按钮的样式表:

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;
}

现在看起来是这样的:

这很好。然而,如果按钮被点击(获得焦点),它开始看起来像这样:

请注意文本周围的轻微阴影矩形。看起来好像正在“选择”文本。当按钮失去焦点时,它又开始看起来正常了。我想这是因为选定的控件像这样突出显示:

但是,我希望我的按钮保持不变,无论它是否聚焦。有没有办法解决这个问题?

【问题讨论】:

    标签: c++ qt qtstylesheets qpushbutton


    【解决方案1】:

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

    【讨论】:

    • 悬停时不会变红。它在被点击后变成这样,并且在点击任何其他控件之前一直如此。
    • @SingerOfTheFall,对,然后试试QPushButton:focus 状态。
    • @SingerOfTheFall,还是 :default 状态?逻辑上不会,但值得一试。
    【解决方案2】:

    这里:http://doc.qt.io/qt-5/stylesheet-examples.html

    我找到了类似的参数:

    "selection-color: yellow;"
    "selection-background-color: blue;"
    

    我还没有尝试过,但它可能是你需要的。

    【讨论】:

      【解决方案3】:

      找到了解决办法。结果是非常简单。

      这个问题确实是由按钮接收焦点引起的。我需要做的就是将按钮的focusPolicy 属性设置为NoFocus。它可以在 QtDesigner 中完成:

      或在代码中:

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

      完成后,按钮的点击不会使其获得焦点,外观也不会改变。

      【讨论】:

      • 您的行为可能略有不同 - 当您专注于按钮时,您可以按空格键“按下”它,但这完全取决于您的需要。就我个人而言,我一直很喜欢可以通过键盘使用的 GUI,这太糟糕了,以至于开发人员现在都忽略了这个功能 :(.
      • @Kolenda,是的,我知道这一点。我的表单上有一个QLineEdit,用户将使用它来输入他的内容。我将在此QLineEdit 中跟踪Enter 的点击,并在发生这种情况时强制按下按钮。
      • @Kolenda,这是一个很好的观点,我也觉得不能点击enter 来完成填充非常令人失望。
      • 您提供的屏幕截图是 Qt Designer,而不是 Qt Creator。 Creator 是一个 IDE,可以(但不一定)集成 Designer
      【解决方案4】:

      这会移除橙色矩形:

      QPushButton:focus {
          outline: none;
      }
      

      PS :您应该尝试为焦点状态添加一些样式,例如更改背景颜色,以便此状态对用户保持“可见”。

      【讨论】:

        猜你喜欢
        • 2011-07-29
        • 2011-11-04
        • 1970-01-01
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多