问题标签 [qstyle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1538 浏览

qt - QMessageBox 从哪里获得它的样式指南、字体大小、...?

我实现了一个自定义 QMessageBox,继承自 QDialog。(使用 qt 4.8.6)

现在的问题是所有自定义消息框看起来与 QMessageBox 静态函数完全不同:

  • QMessageBox::信息(...)
  • QMessageBox::critical(...)
  • QMessageBox::问题(...)
  • QMessageBox::警告(...)

它们在大小、字体、字体大小、图标、背景(静态 qmessagebox 有两种背景颜色)等方面有所不同...。

我发现的唯一一件事是如何访问操作系统特定的消息框图标。

字体或整个样式是否有类似的东西。

我知道 QMessagebox 使用操作系统特定的样式指南。但我找不到他们。您可以在此处查看源代码。

所以我的问题是如何使从 QDialog 继承的自定义 QMessageBox 看起来像静态 QMessageBox::... 函数?

(如果我可以访问在此静态函数调用中创建的 QMessageBox 对象,我可以读出所有样式和字体参数。但这是不可能的。)

0 投票
1 回答
4196 浏览

qt - 在 Qt 中使用剪辑

painEvent如果小部件使用样式表,是否可以在小部件中使用剪辑?

我的问题的背景和原因是我想让小部件在它出现和消失时动画。(类似于调整大小的圆形或正方形,从中心的小区域开始变大)。

我对如何解决这个问题的第一个(也是唯一一个)想法是使用 a 的剪裁QPainter,以便只绘制所需的区域。

如果我使小部件的背景透明并使用它的原始绘图功能QPainter就可以正常工作。但是,如果小部件应用了样式表,我该如何解决这个问题?甚至可能吗?

使用的Qt版本是Qt 4.8.6

我的问题是:

  • 是否可以通过上述策略实现我想要的?
  • 是否也可以以任何方式剪辑所有孩子?
  • 我的策略是合适的还是以这种方式解决它是一个坏主意?
  • 是否有任何其他想法、最佳实践、Qt 类……可以给我想要的东西?

附加信息

我没有太多代码要显示,因为我坚持使用这种剪裁内容。但这里有一些东西可以让我了解我尝试过的东西:

这行得通。

但以下不会改变任何东西:

此外,我注意到,样式表也被绘制了,即使我完全删除了这style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);条线。

0 投票
1 回答
1578 浏览

qt - 任意选择的 QTreeWidgetItems 的样式悬停和选定颜色

我有一个QTreeWidget并且我有一个样式表应用于它。我希望其中一些QTreeWidgetItems 具有与其他样式表样式项目不同hoverselected颜色。normal我为状态着色,setData(columnNumber, Qt::ForegroundRole, colorName)但我无法更改悬停和选定状态的颜色。

有谁知道是否有可能以Qt某种方式实现这一目标?

谢谢!

0 投票
1 回答
16805 浏览

c++ - 应用程序窗口样式

虽然我的操作系统是 Windows,但我希望我的应用程序看起来像 Mac 应用程序。我知道我可以使用QApplication::setStyle.

我也知道Qt提供MacStyle,因为MacStyle

但是,似乎QMacSytle没有声明。编译器无法识别它。Qt网页上说

还有其他方法可以使用该Mac OS样式窗口吗?因为我需要使用它。

0 投票
1 回答
1662 浏览

python - How to modify style hint without QProxyStyle?

I use Python bindings of Qt (PySide or PyQt4). They don't have QProxyStyle.

I want to change the value of a style hint. For example change the SH_Menu_SubMenuPopupDelay popup delay time of a submenu.

In native C++ Qt I would use a QProxyStyle and override styleHint and filter for the style hint of interest and return the value I like. It's done here for example.

But in the Python bindings I use QProxyStyle is not available. So how can a style hint of an existing style be modified there?

0 投票
2 回答
8722 浏览

qt - 带有图标+文本的QToolButton:如何使两者居中?

我在自定义QGridLayout小部件中使用多个QToolButton。这些按钮设置为根据分配的默认 QAction 显示图标 + 文本。唯一的问题是内容(图标+文本)总是左对齐的。

内容(图标+文本,在屏幕截图中标记为红色框)应位于按钮的中心(由蓝色框表示)。

在此处输入图像描述

在大多数情况下,这很好,因为 Qt 会自动尝试以最小尺寸呈现该按钮。但是我正在拉伸按钮以很好地适应我的 QGridLayout。

有没有办法强制内容在按钮中居中?

PS:我在另一个论坛中发现了以下评论,但这似乎很有侵略性,对我来说还不是很清楚:

您可以尝试使用样式表进行水平对齐,但您可能必须为 QStyle::CE_ToolButtonLabel 实现 QStyle 代理并重新实现 drawControl() 或从 QToolButton 派生,覆盖 paintEvent() 并为标签以外的所有内容调用样式。

0 投票
1 回答
849 浏览

macos - Qt中的瞬态滚动条

我想在 Qt 应用程序中使用瞬态滚动条(滚动内容时出现瞬态滚动条,不再需要时消失)。为此,我继承了类QproxyStyle并重新实现了函数styleHint。代码放在下面。文件滚动条.h:

文件滚动条.c:

文件 MainWindow.h:

文件 MainWindow.cpp:

文件 main.cpp:

但是我遇到了一个问题:瞬态滚动条只出现过一次(当文本不适合文本区域时)然后它就消失了,再也没有出现过。

那么我该如何解决这个问题呢?谢谢!

0 投票
0 回答
214 浏览

qt - 看不到 pushButton->setIcon(style.standardIcon(QStyle::SP_MessageBoxCritical))

我在 windows7 上使用 Qt4.8.6,我正在尝试将 QStyle::SP_MessageBoxCritical Icon 设置为 QPushButton,如下所示

但我看不到任何图标,但如果我看到

我能够看到箭头后退按钮。

请让我知道任何人都面临这个问题。

提前致谢 :-)

0 投票
1 回答
404 浏览

c++ - 在哪里保存 QWidget 动画的状态以用于 QStyle 绘制函数?

AQWidget作为paintEvent负责他的绘图的函数。为了正确实现该功能,使用一个QStyle对象来表示每个组件,并使用一个QStyleOption对象来保存控件的状态。

例如:一个自定义ScrollBar实现 his paintEvent,它drawComplexControl使用选项“ CC_ScrollBar”调用。然后,QProxyStyle可以扩展以更改滚动条的外观。

当用户悬停滑块时,paintEvent调用哪个应用新的“悬停”外观,哪个状态保存在QStyleOption::state. 但是对于现在的一天小部件,这个状态不应该立即更新,而是在大约 100-500 毫秒内平滑过渡(动画)。为了使用此转换为小部件设置动画,需要一些值,例如滚动每个部分的动画当前状态 (a qreal/ ?):顶部箭头、底部箭头或滑块。QColor


在这个“长”的介绍之后,我的问题来了:

是否有变量可以设置此动画的状态?我可以使用这个新值进行扩展QStyleOption,但当前的实现似乎已经包含动画,我无法找到这个转换状态的保存位置。

我正在寻找一个规范的答案。

注意:为了避免“可能重复...”,即使稍微相关,这也不是关于如何使用 QAnimation 或创建自定义小部件的问题。

0 投票
2 回答
451 浏览

qt - 在运行时动态改变 QStyle?

我想在运行时调整现有样式,特别是 QStyle::PM_ToolBarIconSize。这可以做到吗?据我所知,您只能继承 QStyle 并覆盖 pixelMetric()。

编辑 1:在 QStyle::PM_ToolBarIconSize 的特定情况下,我可以使用 QToolBar::setIconSize,但这只会为单个工具栏实例设置图标大小。我想一举改变底层样式提示,以影响所有地方的所有工具栏。QStyle::PM_ToolBarIconSize 可能不是我想要调整的唯一样式,它只是我正在查看的第一个样式,恰好具有“更改此实例的图标大小”功能。

编辑 2:我不能只创建一个新的样式子类,因为当前样式已经是基于样式表的自定义样式。用户可以选择多种样式。我不想创建一堆新样式,只是为了调整几个工具栏图标或菜单高度大小设置。