【问题标题】:Qt 4.8: Text on QPushButton becomes selected when window is shownQt 4.8:显示窗口时选择 QPushButton 上的文本
【发布时间】:2014-01-12 08:55:53
【问题描述】:

我有一个简单的 QPushButton 正在使用一些非常简单的代码进行初始化:

QWidget window;
// ...

QPushButton button("New Project", &window);
// setGeometry... setStyleSheet...
button.show();

但是当我启动应用程序时,它看起来好像按钮中的文本是这样选择的:

样式表中没有与蓝色调相关的内容,当我关注屏幕上的另一个窗口时,它又正常了:

它不会在 OS X 上发生,但在我的 Linux 安装中会发生。我认为这是关于选择文本的焦点是哪个窗口的某种问题?

提前感谢您的帮助。 :-)

【问题讨论】:

  • 这看起来像按钮被选为“默认”。如果您没有为选定按钮明确设置样式,您的窗口管理器将设置一些内容。在按钮上尝试setDefault(false)
  • @arne btn.setDefault(false) 似乎没有什么不同。也许 Qt 的样式表中有一个属性可以摆脱样式。
  • 4.8._5_?你能用 Qt 5 重现这个吗?
  • 你有button.show() 而不是window.show(),为什么? :)
  • 在 Linux 上使用通量盒,QPushButton::clearFocus();解决了这个问题。如果这没有帮助,请尝试在您的对话框、主窗口或 centralWidget 上设置焦点()。

标签: c++ linux qt user-interface qt4


【解决方案1】:

我遇到了同样的问题,几乎要生气了:只需使用代理样式来阻止绘制焦点矩形。

像这样创建一个类:

class myStyle : public QProxyStyle
{
    public:
        void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
                           QPainter *painter, const QWidget *widget) const
        {
            if (element == QStyle::PE_FrameFocusRect) return;
            QProxyStyle::drawPrimitive(element, option, painter, widget);
        }
};

然后应用这个类的一个对象作为你的样式:

qApp->setStyle(new myStyle);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多