可以利用QStyleFactory获得当前系统支持的窗体风格,
也可以调用QApplication::setStyle()改变窗体的风格。
本实例通过一个显示风格可变窗体,通过下拉列表框中的选择,改变窗体的显示风格。
代码如下所示:
style.h:
#ifndef STYLE_H #define STYLE_H #include <QDialog> class QFrame; class Style : public QDialog { Q_OBJECT public: Style(QWidget *parent=0); void createLeftLayout(); void createRightLayout(); public slots: void slotChangeStyle(QString); private: QFrame *leftFrame; QFrame *rightFrame; }; #endif // STYLE_H
#include "style.h" #include <QtGui> Style::Style(QWidget *parent) :QDialog(parent) { setWindowTitle(tr("Change Window Style")); createLeftLayout(); createRightLayout(); QHBoxLayout *mainLayout = new QHBoxLayout; mainLayout->setMargin(10); mainLayout->setSpacing(5); mainLayout->addWidget(leftFrame); mainLayout->addWidget(rightFrame); setLayout(mainLayout); } void Style::createLeftLayout() { leftFrame = new QFrame; leftFrame->setFrameStyle(QFrame::Panel|QFrame::Raised); QComboBox *styleComboBox = new QComboBox; styleComboBox->addItems(QStyleFactory::keys()); QPushButton *button = new QPushButton(tr("pushbutton")); QHBoxLayout *hbox = new QHBoxLayout; hbox->addWidget(styleComboBox); hbox->addWidget(button); QSpinBox *spinBox = new QSpinBox; spinBox->setRange(0,9); QLineEdit *lineEdit = new QLineEdit; lineEdit->setText("Hello Hello"); QGroupBox *group = new QGroupBox; QRadioButton *radio1 = new QRadioButton(tr("radiobutton1"),group); QRadioButton *radio2 = new QRadioButton(tr("radiobutton2"),group); QRadioButton *radio3 = new QRadioButton(tr("radiobutton3"),group); QCheckBox *checkBox = new QCheckBox(tr("checkbox"),group); QVBoxLayout *groupLayout = new QVBoxLayout; groupLayout->addWidget(radio1); groupLayout->addWidget(radio2); groupLayout->addWidget(radio3); groupLayout->addWidget(checkBox); group->setLayout(groupLayout); QVBoxLayout *vbox = new QVBoxLayout; vbox->addLayout(hbox); vbox->addWidget(spinBox); vbox->addWidget(lineEdit); vbox->addWidget(group); leftFrame->setLayout(vbox); connect(styleComboBox,SIGNAL(activated(QString)),this,SLOT(slotChangeStyle(QString))); slotChangeStyle(QStyleFactory::keys()[0]); } void Style::createRightLayout() { rightFrame = new QFrame; rightFrame->setFrameStyle(QFrame::Panel|QFrame::Raised); QSlider * slider = new QSlider(Qt::Horizontal); QTableWidget *table = new QTableWidget; table->setColumnCount(3); table->setRowCount(4); QTextEdit *edit = new QTextEdit; edit->setText("Hello World!\n Qt by Trolltech is the standard framework for developing high-performance cross-platform applications.Qt provides single-source portability across Microsoft Windows, Mac OS X, Linux, all major commercial Unix variants, and embedded Linux. On embedded Linux, the Qt API is available as Qtopia Core."); QVBoxLayout *layout = new QVBoxLayout; layout->setSpacing(10); layout->addWidget(slider); layout->addWidget(table); layout->addWidget(edit); rightFrame->setLayout(layout); } void Style::slotChangeStyle(QString style) { QApplication::setStyle(QStyleFactory::create(style)); QApplication::setPalette(QApplication::style()->standardPalette()); }
#include <QApplication> #include "style.h" int main(int argc, char * argv[]) { QApplication app(argc,argv); Style s; s.show(); return app.exec(); }