Qt4之改变窗体显示风格


可以利用QStyleFactory获得当前系统支持的窗体风格,也可以调用QApplication::setStyle()改变窗体的风格。

本实例通过一个显示风格可变窗体,通过下拉列表框中的选择,改变窗体的显示风格。

代码如下所示:

style.h:

  1. #ifndef STYLE_H   
  2. #define STYLE_H   
  3.   
  4. #include <QDialog>   
  5.   
  6. class QFrame;  
  7.   
  8. class Style : public QDialog  
  9. {  
  10.     Q_OBJECT  
  11. public:  
  12.     Style(QWidget *parent=0);  
  13.       
  14.     void createLeftLayout();  
  15.     void createRightLayout();  
  16.       
  17. public slots:  
  18.     void slotChangeStyle(QString);  
  19.       
  20. private:  
  21.     QFrame *leftFrame;  
  22.     QFrame *rightFrame;  
  23. };  
  24.   
  25. #endif  // STYLE_H  
style.cpp:
  1. #include "style.h"   
  2.   
  3. #include <QtGui>   
  4.   
  5. Style::Style(QWidget *parent)  
  6.     :QDialog(parent)  
  7. {  
  8.     setWindowTitle(tr("Change Window Style"));  
  9.       
  10.     createLeftLayout();  
  11.     createRightLayout();  
  12.       
  13.     QHBoxLayout *mainLayout = new QHBoxLayout;  
  14.     mainLayout->setMargin(10);  
  15.     mainLayout->setSpacing(5);  
  16.     mainLayout->addWidget(leftFrame);  
  17.     mainLayout->addWidget(rightFrame);  
  18.     setLayout(mainLayout);  
  19. }  
  20.   
  21. void  
  22. Style::createLeftLayout()  
  23. {      
  24.     leftFrame = new QFrame;  
  25.     leftFrame->setFrameStyle(QFrame::Panel|QFrame::Raised);  
  26.     QComboBox *styleComboBox = new QComboBox;  
  27.     styleComboBox->addItems(QStyleFactory::keys());  
  28.   
  29.     QPushButton *button = new QPushButton(tr("pushbutton"));  
  30.     QHBoxLayout *hbox = new QHBoxLayout;  
  31.     hbox->addWidget(styleComboBox);  
  32.     hbox->addWidget(button);  
  33.       
  34.     QSpinBox *spinBox = new QSpinBox;  
  35.     spinBox->setRange(0,9);  
  36.     QLineEdit *lineEdit = new QLineEdit;  
  37.     lineEdit->setText("Hello Hello");  
  38.       
  39.     QGroupBox *group = new QGroupBox;  
  40.     QRadioButton *radio1 = new QRadioButton(tr("radiobutton1"),group);  
  41.     QRadioButton *radio2 = new QRadioButton(tr("radiobutton2"),group);  
  42.     QRadioButton *radio3 = new QRadioButton(tr("radiobutton3"),group);  
  43.     QCheckBox *checkBox = new QCheckBox(tr("checkbox"),group);  
  44.     QVBoxLayout *groupLayout = new QVBoxLayout;  
  45.     groupLayout->addWidget(radio1);  
  46.     groupLayout->addWidget(radio2);  
  47.     groupLayout->addWidget(radio3);  
  48.     groupLayout->addWidget(checkBox);  
  49.     group->setLayout(groupLayout);  
  50.       
  51.     QVBoxLayout *vbox = new QVBoxLayout;  
  52.     vbox->addLayout(hbox);  
  53.     vbox->addWidget(spinBox);  
  54.     vbox->addWidget(lineEdit);  
  55.     vbox->addWidget(group);  
  56.       
  57.     leftFrame->setLayout(vbox);  
  58.   
  59.     connect(styleComboBox,SIGNAL(activated(QString)),this,SLOT(slotChangeStyle(QString)));  
  60.     slotChangeStyle(QStyleFactory::keys()[0]);  
  61. }  
  62.   
  63. void  
  64. Style::createRightLayout()  
  65. {  
  66.     rightFrame = new QFrame;  
  67.     rightFrame->setFrameStyle(QFrame::Panel|QFrame::Raised);  
  68.       
  69.     QSlider * slider = new QSlider(Qt::Horizontal);  
  70.     QTableWidget *table = new QTableWidget;  
  71.     table->setColumnCount(3);  
  72.     table->setRowCount(4);  
  73.     QTextEdit *edit = new QTextEdit;  
  74.     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.");  
  75.     QVBoxLayout *layout = new QVBoxLayout;  
  76.     layout->setSpacing(10);  
  77.     layout->addWidget(slider);  
  78.     layout->addWidget(table);  
  79.     layout->addWidget(edit);  
  80.       
  81.     rightFrame->setLayout(layout);  
  82. }  
  83.   
  84. void  
  85. Style::slotChangeStyle(QString style)  
  86. {  
  87.   
  88.     QApplication::setStyle(QStyleFactory::create(style));  
  89.     QApplication::setPalette(QApplication::style()->standardPalette());  
  90. }  

main.cpp:

  1. #include <QApplication>   
  2. #include "style.h"   
  3.   
  4. int  
  5. main(int argc, char * argv[])  
  6. {  
  7.     QApplication app(argc,argv);  
  8.     Style s;  
  9.     s.show();  
  10.     return app.exec();  
  11. }  

相关内容