本章节主要介绍程序的外观相关设置,比如位置大小颜色等属性的修改。
窗体设置 #
常见的窗体设置包括标题,图标,大小,位置,透明度等。
设置方法如下。
widget.cpp
#include "widget.h"
#include <QStyle>
Widget::Widget(QWidget *parent) : QWidget(parent)
{
// 设置标题
setWindowTitle("this is app title");
// 设置图标
setWindowIcon(style()->standardIcon(QStyle::SP_DesktopIcon));
// 设置最大尺寸
setMaximumHeight(800);
setMaximumWidth(1000);
// 设置最小尺寸
setMinimumHeight(300);
setMinimumWidth(500);
// 设置当前尺寸
resize(600,400);
// 设置固定大小
// setFixedSize(600, 400);
// 设置当前位置和大小, 左上角为(0,0)
// setGeometry(0, 0, this->width(), this->height());
// 全屏
// showFullScreen();
// 显示最小尺寸
// showMinimized();
// 显示最大尺寸
// showMaximized();
// 显示正常大小
showNormal();
// 设置无边框模式
// setWindowFlag(Qt::FramelessWindowHint);
// 设置窗口置顶
setWindowFlag(Qt::WindowStaysOnTopHint);
// 设置窗口透明度
setWindowOpacity(0.5);
}
窗口标题和图标演示。

透明窗口,无边框,置顶演示。

颜色字体 #
Qt程序界面颜色设置,主要分为前景色和背景色,每一个widget组件都有一个QPalette类的对象,它可以进行对组件的设置颜色。
我们通过一个程序来演示,设计一个UI包含按钮,标签,输入框等常用组件,两个Combox下拉框分别用来选择背景色和前景色。
示例代码。
#include "widget.h"
#include <QStyle>
#include <QPalette>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLineEdit>
#include <QTextEdit>
#include <QToolButton>
#include <QLabel>
#include <QComboBox>
#include <QFont>
#include <QPushButton>
Widget::Widget(QWidget *parent) : QWidget(parent)
{
setWindowTitle("QPalette demo");
QLabel *label = new QLabel("label");
QLineEdit *line = new QLineEdit("lineedit");
QTextEdit *text = new QTextEdit();
QPushButton *button = new QPushButton("push button");
QComboBox *cb_bg = new QComboBox();
QComboBox *cb_text = new QComboBox();
cb_bg->addItems(QColor::colorNames());
cb_text->addItems(QColor::colorNames());
QVBoxLayout *main_layout = new QVBoxLayout();
main_layout->addWidget(label);
main_layout->addWidget(button);
main_layout->addWidget(cb_bg);
main_layout->addWidget(cb_text);
main_layout->addWidget(line);
main_layout->addWidget(text);
this->setLayout(main_layout);
connect(cb_bg, &QComboBox::currentTextChanged,[=] () {
QPalette pale = this->palette();
QColor color = QColor(cb_bg->currentText());
// 设置背景颜色
pale.setColor(QPalette::Background, color);
// 设置文本选中后背景色
pale.setColor(QPalette::Highlight, Qt::red);
// 设置文字编辑框的底色
pale.setColor(QPalette::Base, color);
// 设置按钮背景色,经过测试windows平台无效
pale.setColor(QPalette::Button, color);
this->setPalette(pale);
});
connect(cb_text, &QComboBox::currentTextChanged,[=](){
QPalette pale = this->palette();
QColor color = QColor(cb_text->currentText());
// 设置前景色,既就是文字颜色
pale.setColor(QPalette::WindowText, color);
// 设置选中文字的颜色
pale.setColor(QPalette::HighlightedText, Qt::white);
// 设置编辑框输入文本的颜色
pale.setColor(QPalette::Text, color);
// 设置按钮文本的颜色
pale.setColor(QPalette::ButtonText, color);
this->setPalette(pale);
});
this->setAutoFillBackground(true);
// 获取当前字体,并设置字体大小
QFont font = this->font();
font.setPixelSize(36);
this->setFont(font);
}
运行演示。



QSS样式 #
QSS样式是Qt程序中一个类似于CSS语法的自定义控件外观的语言,使用QSS既可以对单个组件进行设置,也可以对程序整体进行设置,而且功能更加强大,细节更加丰富。
演示代码。
#include "widget.h"
#include <QStyle>
#include <QPalette>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLineEdit>
#include <QTextEdit>
#include <QToolButton>
#include <QLabel>
#include <QListWidget>
#include <QComboBox>
#include <QSlider>
#include <QFont>
#include <QPushButton>
Widget::Widget(QWidget *parent) : QWidget(parent)
{
setWindowTitle("QSS demo");
QPushButton *pb = new QPushButton("push button");
QComboBox *cb = new QComboBox();
cb->addItems(QColor::colorNames());
QListWidget *lw = new QListWidget();
lw->addItems(QColor::colorNames());
QSlider *sl_h = new QSlider(Qt::Horizontal);
QVBoxLayout *main_layout = new QVBoxLayout();
main_layout->addWidget(pb);
main_layout->addWidget(cb);
main_layout->addWidget(lw);
main_layout->addWidget(sl_h);
this->setLayout(main_layout);
QString qss;
qss = QString("background-color: rgb(50,50,50); "
"border:1px solid #a36a30;"
"border-radius:5px;"
"color:white;");
this->setStyleSheet(qss);
}
运行结果。

QSS样式也可以写入*.css文件,在程序运行时加载并设置。
以下是QSS的其他样式,可供参考。
QPushButton
{
background-color: rgb(134,183,200); //背景色
border:2px solid #5F92B2; //边界和边界颜色
border-radius:5px; //边界圆滑
color:white; //字体颜色
}
QPushButton:hover
{
background-color: rgb(0,130,150); //伪状态经过时背景色
border:2px solid #5F92B2; //边界和边界颜色
border-radius:5px; //边界圆滑
color:white; //字体为白色
}
QPushButton:hover:pressed
{
background-color:rgb(85,170,255); //伪状态,点击时的背景色
border:2px solid #3C80B1; //
border-radius:5px;
color:white;
}
QComboBox
{
color:white; //设置字体颜色
min-height: 50px; //设置最小高度
min-width: 60px; //设置最小宽度
background-color:transparent; //背景色
selection-background-color: rgb(80, 80, 80); //选中背景色
}
QComboBox QAbstractItemView
{
font:14px; //下拉列表中的字体大小
selection-color:white; //选中时的字体颜色
selection-background-color:rgb(80, 80, 80); //选中背景色
background-color:rgb(80, 80, 80); //背景色
}
QComboBox QAbstractItemView::item
{
color:white; //item的字体颜色
min-height: 50px; //item的最小高度
min-width: 60px; //item的最小宽度
}
QComboBox::down-arrow
{
image:url(:/image/image/down.png); //设置下拉的按钮样式图片
}
QComboBox::drop-down
{
border:0px; //设置下拉按钮边界宽度为0,将阴影边界取出
min-width: 40px; //设置下拉按钮宽度
}
更多关于CSS样式的介绍请查看Qt帮助文档。