QT界面美化之QStyle

原创 2010年01月04日 09:26:00

 

转贴: 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助手

Qt之界面美化输入框

我们先看下酷狗音乐的输入框效果图: 这里我们需要实现在输入框里面添加一个按钮(多个也一样),并且提供一个默认时候的文字。。直接上代码好了。 QHBoxLayout *lay = ...
  • WU5151
  • WU5151
  • 2015年07月28日 16:44
  • 1633

Qt的ComboBox的美化

组合框是一个重要且应用广泛的组件,一般由两个子组件组成:文本下拉单部分和按钮部分。在许多既需要用户选择、又需要用户手动输入的应用场景下,组合框能够很好的满足我们的需求。如我们经常使用的聊天软件QQ登录...

【QT】4 - 初试Qt Style Sheets 之美化

由于某些原因,本人对于UI美化十分热衷,平生最大的想法就是做一个“让我的小伙伴们都惊呆了”的UI程序,跟随工作转辗折腾,始终不遂愿,后来接触了HtmLayout和Sciter疯狂了好几周,翻译N多文章...
  • bbdxf
  • bbdxf
  • 2014年04月02日 11:08
  • 12320

利用Qt实现简单的界面

要利用Qt实现界面首先必备的两个工具的

Qt 界面美化

1.设置窗体透明: QWidget *pWidget->setStyleSheet("background-color:rgba(255, 255, 255, 0);border-style: so...

Qt美化界面的心得整理

最近在美化QT,一直对纯代码编写和美化界面能力拙急。网上搜了很多很多资料,但由于那个庞大的工程还没完成,先将网上的资料整理一下,有一些没用到的,留着以后看。等我的界面美化完之后再po上来~ /***...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Qt中如何通过QStyle自定义能够跨平台的界面控件

我们经常会碰到需要定制界面控件的要求。如果只是在一个平台上,比如说你的控件只需要在Windows上显示,那很好办,Hard code 你的look and feel就可以了。但是如果界面需要在不同平台...

QT内置的ICON资源保存在QStyle类里。

QT内置的ICON资源保存在QStyle类里。 可以通过成员函数 的QStyle :: standardIcon,en 来获取。 保存的icon有: 枚举的QStyle ...

自定义QT窗口部件外观之QStyle

自定义QT窗口部件外观 重新定义Qt内置窗口部件的外观常用的方法有两种:一是通过子类化QStyle 类或者预定义的一个样式,例如QWindowStyle,来定制应用程序的观感;二是使用Qt样式表。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QT界面美化之QStyle
举报原因:
原因补充:

(最多只允许输入30个字)