转贴:http://www.cppblog.com/umbcom/
QT中的QStyle类提供了对QT应用程序界面的封装,QT本身也是利用它应对不同平台下的界面外观的。例如 在windowxp下 你所写的程序的默认外观是通过QT自身调用QWindowsXPStyle来实现的.既然它提供了这么方便的类用来绘制独立于应用程序功能框架的程序外观,那想对自己程序的界面进行美化人,你确实很有必要去了解一下它。
虽然QT本身提供了多种外观样式设计的方法,如QT样式表,传说是一种从CSS得到的灵感,还有另一种就是利用QGraphicsView/QGraphics Scene/QGraphics Item这种框架来绘制的程序界面。前一个虽说很好用也很强大,但我个人总觉得来的不直观。后一个功能一样强大,QT的examples and demos那个程序就是用它做的,它能做些什么就要看你的想象力了,只不过场景和场景中所有的部件你必须要自己重画,它只提供了一些简单的点.线.矩形等等,将你现有的程序移植到新的利用QGraphicsView/Scene框架制作的界面上,显然所要的时间不会是你想要的。
QStyle提供给你的则是一种丑小鸭变天鹅的方法,可能这种比喻不是很贴切,但它达到的效果确实是立竿见影,不会让你的程序有涅磐般的感觉。假设你在windows环境调试QT程序,那么在你的main函数里的return exec()之前添加这么一句:qApp->setStyle(new QPlastiqueStyle); 再启动你的程序看看,虽然这对大部分人来说并不是天鹅,但就算变天鹅application也只是需要这一句话。
我们首先要做的就是重载我们要实现的QStyle基类,它派生出了:
QMotifStyle,QWindowsStyle,QCDEStyle,QCleanlooksStyle,QPlastiqueStyle,QWindowsXPStyle等等样式,QMacStyle在Windows平台下无法使用,至少我没见过相关的示例程序.好了 我们派生的类叫MyStyle,class MyStyle : public QCleanLooksStyle.之后就是几个相关的重载函数,这几个重载的函数十分重要,他关系着你窗体绘制方式.如下:
class MyStyle : public QCleanLooksStyle
{
//以下三个函数在装载Style和卸载Style时调用,它可以是适当修改窗口部件和调色板
void polish(QPalette &palette);
void polish(QWidget *widget);
void unpolish(QWidget *widget);
//设置各部件的线宽,大小等
int pixelMetric(PixelMetric metric, const QStyleOption *option,const QWidget *widget) const;
//分别设置各种部件的布局,比如checkbox的text在左边或者在右边
int styleHint(StyleHint hint, const QStyleOption *option,const QWidget *widget, QStyleHintReturn *returnData) const;
//这个则是最重要的,在这里面你要实现对不同部件的绘制,当然你也可以调用默认的方法.
void drawPrimitive(PrimitiveElement element, const QStyleOption *option,QPainter *painter, const QWidget *widget) const;
}
在 drawPrimitive里面 element这个参数就是我们需要重绘的部件,例如 我们要重新绘制QToolButton,则
switch(element)
{
case PE_PanelButtonTool:
//具体绘制
default:
//调用基类的处理方法
QCleanLooksStyle::drawPrimitive(element, option, painter, widget);
}
具体各种部件的名称在QT助手里面都有说明,想了解更具体的QStyle使用方法,请查看:
http://doc.trolltech.com/4.4/qstyle.html或者您机器上的QT助手
分享到:
相关推荐
利用QStyle函数设置不同风格的界面
Qt style 界面美工参考资料,包含了Qt常控件用QStyle的美化方法。
课程目标 • Qt 基础的应用程序 • 学会如何创建Qt可视化程序 • 使用现有的和用户自定义的组件 • 使用Graphics view 组件 • 学会如何在各平台上(Symbian,Meego...• 美化用户界面 • QStyle • Style Sheets • 总结
用QStyle自定义实现的弹出菜单,菜单背景透明;菜单上的文字及鼠标滑过时的图案不透明。
Qt内置了一些图标,内置图标的枚举变量大家可在Qt助手索引中输入QStyle::StandardPixmap即可查看详细描述。但官方文档中没有图标实例,这个工程就是将所有图标显示出来。(工程为Qt5.9.5创建的)
重写QProxyStyle,实现Qmenu的背景半透明效果,边框圆角,菜单项图标定制大小。二级菜单间距调整,菜单项高度调整。菜单项字体设置。
本文主要讲解了Qt的界面外观,本文列举了详细的示例进行说明
目录 ...9.2QStyle类的使用 9.3样式表概述 9.4使用样式表 9.4.1与QtDesigner集成使用 …… 第10章在程序中使用.ui文件 第11章布局管理 第12章使用QtCreator 第13章Qt核心机制与原理 参考文献 后记
QT样式表简介。Qt样式表的思想很大程度上是来自于HTML的层叠式样式表(CSS), 通过... 这个特殊的子类实际上是其他的系统特定风格类的包裹类, 它会把通过样式表指定的自定义外观风格应用在底层的系统特定风格之上。
Subclassing QStyle Chapter 20. 3D Graphics Drawing Using OpenGL Combining OpenGL and QPainter Doing Overlays Using Framebuffer Objects Chapter 21. Creating Plugins Extending Qt with ...
Qss 是用来设置界面样式的设置的方法就是类似于 CSS,通过以一定规则组 织的字符串来给界面设置样式, 而不用我们调用控件对象的接口或子类化 QStyle 去设置样式
QStyle/DTK重绘Qt-GUI已有控件,举例QScrollBar QStyle/DTK重绘自定义需求控件,举例MySwitchButton 详细: https://xmuli.blog.csdn.net/
Qt4_子类化QStyle
自绘QTreeView,添加QPushbutton,并用样式设置按钮,进行美化
样式表是通过QStyle的一个叫做QStyleSheetStyle的特殊子类来实现的。 这个特殊的子类实际上是其他的系统特定风格类的包裹类,它会把通过样式表指定的自定义外观风格应用在底层的系统特定风格之上。 10.2 样式表语法...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
phantomstyle:适用于传统主义者的跨平台QStyle
Можетиспользоватьсясовместосдругимистилями(QStyle); Qt 4.8上的Исправленбагсотрисовкойграницскроллируемыхвидж...
pyqt5 QTableWidget/QTableView表头复选框源码
用于素数因式分解的 Shor 算法的一个版本。 请随时对此发表评论或提出... (并非我找到的所有 Shor 版本都可以做到这一点) 在“order_qstyle”函数中使用“parfor”将有助于加快速度。 例子): shor(156) 在 0.06