Qt 4.8:显示窗口时选择 QPushButton 上的文本

Posted

技术标签:

【中文标题】Qt 4.8:显示窗口时选择 QPushButton 上的文本【英文标题】:Qt 4.8: Text on QPushButton becomes selected when window is shown 【发布时间】: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 上设置焦点()。 【参考方案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);

【讨论】:

以上是关于Qt 4.8:显示窗口时选择 QPushButton 上的文本的主要内容,如果未能解决你的问题,请参考以下文章

Qt Designer 4.8 在 Mac OS X 10.7 上启动时崩溃

使用 QtDBus 支持构建 Qt 4.8

在 Qt 4.8 中获取 QInputEvent 被放入 QEventLoop 队列时的时间戳

几个ui显示在一个窗口里

Qt 4.8 杀死并重新启动 GUI

Qt 创建器中的白色窗口