Qt安装包自带了大量的例子来演示Qt GUI特性,其很多Demo十分之炫。最近我在学习Qt绘图,研究了下Path Stroking, Gradients这几个例子,发现其面板风格非常漂亮,要是能用在自己的程序中该多好啊!
通过阅读代码,发现这些程序的main.cpp中有以下代码,如Gradients的main.cpp中:
GradientWidget gradientWidget(0);
QStyle *arthurStyle = new ArthurStyle();
gradientWidget.setStyle(arthurStyle);
QList<QWidget *> widgets = gradientWidget.findChildren<QWidget *>();
foreach (QWidget *w, widgets) {
w->setStyle(arthurStyle);
w->setAttribute(Qt::WA_AcceptTouchEvents);
}
显然是用了自定义风格的外观,这个外观风格的代码在Qt目录/demos/shared目录下,有三个类:
ArhurStyle类:定义了QPushButton, QGroupBox, QSpinBox,QRadioButton等控件的外观
ArthurFrame类:一个功能扩展的Frame
HoverPoint:一组可以随意移动的Point容器
为了使用这些风格,我们可以将shared目录中的以下文件Copy到自己的工程目录下:
把其中的源代码和shared.qrc资源文件添加到Qt工程中,
然后,按照《C++ Qt GUI编程》第351页的方法,在main()函数中调用这个ArthurStyle风格就行了(别忘了include arthurstyle.h!):
QApplication::setStyle(new ArthurStyle); // 使用Arthur外观
在我的程序中,main.cpp是这样的:
#include <QApplication>
#include <QTextCodec>
#include "window.h"
#include "arthurstyle/arthurstyle.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QApplication::setStyle(new ArthurStyle); // 使用Arthur外观
//---------------让Qt支持中文-----------------------------
QTextCodec *codec = QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
//------------------------------------------------------
Window window;
window.show();
return app.exec();
}
运行下就有效果了!看看我的程序,按钮跟面板的风格都变了!^_^