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 上启动时崩溃