当前位置:嗨网首页>书籍在线阅读

14-Qt内置样式的使用

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

16.3.2 Qt内置样式的使用

使用Qt内置的样式,可以通过QStyleFactory::keys()获取运行平台支持的样式列表,然后用QStyleFactory::create()创建样式,再用QApplication::setStyle()设置样式即可。

创建一个基于QMainWindow的Widget应用程序samp16_2,并设计界面。如图16-9所示是设置为QWindowsStyle样式时的运行界面,具有老式的 Windows界面效果。

258.png

图16-9 应用QWindowsStyle样式的界面

下面是主窗口构造函数的代码:

QMainWindow(parent),   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
   QRegExp regExp(".(.*)\\+?Style");
   QString defaultStyle = QApplication::style()->metaObject()->className();
   ui->statusBar->showMessage(defaultStyle);
   if (regExp.exactMatch(defaultStyle))
      defaultStyle = regExp.cap(1);
   ui->comboSysStyle->addItems(QStyleFactory::keys());
   ui->comboSysStyle->setCurrentIndex(ui->comboSysStyle->findText( 
                  defaultStyle, Qt::MatchContains));
}

在构造函数中,通过QStyleFactory::keys()获取当前平台上的样式名称列表,并添加到下拉列表框comboSysStyle里。

程序运行后,在“系统样式”下拉列表框里会显示当前平台支持的样式列表,例如在Windows平台上,列表里会有Widnows、WidnowsXP、WidnowsVista和Fusion。在“系统样式”下拉列表框中选择一个样式可以为应用程序设置样式,下拉列表框comboSysStyle的currentIndexChanged()信号响应槽函数代码如下:

void MainWindow::on_comboSysStyle_currentIndexChanged(const QString &arg1)
{
//   qApp->setStyle(arg1);
   QStyle *style=QStyleFactory::create(arg1);
   qApp->setStyle(style);
   ui->statusBar->showMessage(style->metaObject()->className());
}

这里首先使用QStyleFactory::create(arg1)根据选择的样式名称字符串arg1创建样式style,然后使用qApp->setStyle(style)为应用程序设置样式。

如果不是需要显示样式的类名称,直接使用qApp->setStyle(arg1)也可以为应用程序设置样式。

窗口上有“取消样式表”和“应用样式表”两个按钮,代码如下:

void MainWindow::on_btnNormal_clicked()
{//取消所有样式表
   this->setStyleSheet("");
}
void MainWindow::on_btnStyleSheet_clicked()
{//设置样式表
   this->setStyleSheet("QPlainTextEdit{"color: blue; "
                  "font: 13pt '宋体';}"
                  "QPushButton:hover{background-color:lime;}"
                  "QLineEdit{ border: 2px groove red;"
                  "background-color: rgb(170, 255, 127); "
                  "border-radius: 6px;}"
                  "QCheckBox:checked{color: red;}"
                  "QRadioButton:checked{color:red;}"
                  );
}

“应用样式表”按钮的代码为界面上的几个显示组件类设置了样式表,在设置样式表后,即使修改窗口样式,这些样式表定义的显示效果依然存在。