Qt4之改变窗体显示风格

可以利用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

style.cpp:

#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());
}



main.cpp:

#include <QApplication>
#include "style.h"

int
main(int argc, char * argv[])
{
    QApplication app(argc,argv);
    Style s;
    s.show();
    return app.exec();
}



你可能感兴趣的:(Qt4之改变窗体显示风格)