QProxyStyle类是一个简便的类,它简化了动态覆盖的QStyle元素。
QProxyStyle封装了一个QStyle(通常是默认的系统风格),用于动态覆盖绘画或其他特定风格的行为。
在这里只介绍几个在实际应用中经常重载的函数
[virtual] void QProxyStyle::drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const
使用提供的画家和调色板在指定的矩形中绘制给定的文本(QPainter *painter)。
文本使用画笔绘制,并按照指定的对齐方式对齐和包装。 如果指定了明确的textRole,则使用给定角色的调色板颜色绘制文本。 启用的参数指示是否启用项目; 当重新实现此功能时,启用的参数应该影响项目的绘制方式。
[virtual] void QProxyStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const
使用提供的绘画工具根据指定的对齐方式在给定的矩形中绘制给定的像素图。
void QProxyStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = Q_NULLPTR) const
使用选项指定的样式选项,使用提供的画家绘制给定的基本元素。
Widget参数是可选的,可能包含一个可能有助于绘制原始元素的Widget。
下表列出了原始元素及其关联的样式选项子类。 样式选项包含绘制元素所需的所有参数,包括保存绘制时使用的样式标记的QStyleOption :: state。 该表还描述了在将给定选项转换为适当的子类时设置了哪些标志。
[virtual] void QProxyStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = Q_NULLPTR) const
用提供的画家用选项指定的样式选项绘制给定的元素。
小部件的参数是可选的,可以用来帮助绘制控制。 option参数是一个指向QStyleOption对象的指针,可以使用qstyleoption_cast()函数将其转换为正确的子类。
下表列出了控件元素及其关联的样式选项子类。 样式选项包含绘制控件所需的所有参数,包括保存绘制时使用的样式标记的QStyleOption :: state。 该表还描述了在将给定选项转换为适当的子类时设置了哪些标志。
virtual] void QProxyStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = Q_NULLPTR) const
使用提供的画家使用选项指定的样式选项绘制给定的控件。
小部件的参数是可选的,可以用来帮助绘制控制。
option参数是一个指向QStyleOptionComplex对象的指针,可以使用qstyleoption_cast()函数将其转换为正确的子类。 请注意,指定选项的rect成员必须在逻辑坐标中。 在调用drawPrimitive()或drawControl()函数之前,重新实现此函数应使用visualRect()将逻辑坐标更改为屏幕坐标。
下表列出了复杂的控制元素及其相关的样式选项子类。 样式选项包含绘制控件所需的所有参数,包括保存绘制时使用的样式标记的QStyleOption :: state。 该表还描述了在将给定选项转换为适当的子类时设置了哪些标志。
在这里提供一个Qt官方给出的实例,实现了显示如何覆盖任何平台上的快捷方式下划线行为
#include "textedit.h"
#include
#include
class MyProxyStyle : public QProxyStyle
{
public:
int styleHint(StyleHint hint, const QStyleOption *option = 0,
const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const
{
if (hint == QStyle::SH_UnderlineShortcut)
return 0;
return QProxyStyle::styleHint(hint, option, widget, returnData);
}
};
int main(int argc, char **argv)
{
Q_INIT_RESOURCE(textedit);
QApplication a(argc, argv);
a.setStyle(new MyProxyStyle);
TextEdit mw;
mw.resize(700, 800);
mw.show();
//...
}
最后在这里给出一些关于QProxyStyle的相关博客
//使用QProxyStyle定制QMenu (一)
http://blog.csdn.net/MatchYang/article/details/51960015
//使用QProxyStyle定制QMenu (二)
http://m.blog.csdn.net/MatchYang/article/details/52002566
//QTabWidget 改变tabBar位置 并改变文字方向
http://blog.csdn.net/skyztttt/article/details/52448992