QLabel控件
用来设计UI界面,给界面添加图片。右键项目名称来添加资源文件,选择Add New。

填上资源文件的名称(可随意写一个),默认添加项目路径下。后面的步骤默认即可,点击完成。

添加 qss 文件。 QSS 文件是使用 Qt 程序相关联的样式表文件。它由 GUI 元素的外观和感觉,包括布局,颜色,鼠标的行为,大小和字体。它的风格,一个可以合并到一个 UI(用户界面)。 与 HTML 的 CSS 类似, Qt 的样式表是纯文本的格式定义,在应用程序运行时可以载入和解析这些样式定义,从而使应用程序的界面呈现不同的效果。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #ifndef MAINWINDOW_H #define MAINWINDOW_H
#include <QMainWindow> #include <QLabel> #include <QPushButton>
class MainWindow : public QMainWindow { Q_OBJECT
public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: QLabel *labelString; QLabel *labelImage; QPushButton *pushButton;
private slots: void pushButtoncheckedchanged(); }; #endif
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->setGeometry( 0, 0, 800, 480); QPixmap pixmap(":/ig.png"); labelImage = new QLabel(this); labelImage ->setGeometry( 0, 0 , 800, 480); labelImage ->setPixmap(pixmap); labelImage->setScaledContents(true); labelString = new QLabel(this); labelString ->setText("标签演示文本"); labelString ->setGeometry( 0, 0, 100, 20); pushButton = new QPushButton("关闭窗口" ,this); pushButton->setGeometry(300,200,80,40); connect(pushButton, SIGNAL(clicked()), this, SLOT(pushButtoncheckedchanged())); } MainWindow::~MainWindow() { } void MainWindow::pushButtoncheckedchanged() { this->setVisible(false); }
|

QDateEdit和QDateTimeEdit控件
QDateTimeEdit类提供一个用于编辑日期和时间的小部件,QDateTImeEdit允许用户使用键盘或箭头编辑日期。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QDateTimeEdit> #include <QTimeEdit> #include <QDateEdit> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: QDateTimeEdit *dateTimeEdit; QTimeEdit *timeEdit; QDateEdit *dateEdit; }; #endif
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->setGeometry( 0, 0, 800, 480); dateTimeEdit = new QDateTimeEdit(QDateTime::currentDateTime(), this); dateTimeEdit -> setGeometry( 300, 200, 200, 30); timeEdit = new QTimeEdit(QTime :: currentTime(), this); timeEdit ->setGeometry( 300, 240, 200, 30); dateEdit = new QDateEdit(QDate::currentDate(), this); dateEdit ->setGeometry( 300, 280, 200, 30);
} MainWindow::~MainWindow() { }
|

QProgressBar控件
QProgressBar 继承 QWidget。 QProgressBar 小部件提供了一个水平或垂直的进度条。进度条用于向用户显示操作的进度,并向他们确认应用程序仍在运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #ifndef MAINWINDOW_H #define MAINWINDOW_H
#include <QMainWindow> #include <QProgressBar> #include <QTimer>
class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private:
QProgressBar *progressBar; QTimer *timer;
int value; private slots:
void timerTimeOut();
}; #endif
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
this->setGeometry(0, 0, 800, 480); progressBar = new QProgressBar(this); progressBar->setGeometry(300, 200, 200, 60);
progressBar->setStyleSheet ( "QProgressBar{border:8px solid #FFFFFF;" "height:30;" "border-image:url(:/images/battery.png);" "text-align:center;" "color:rgb(255,0,255);" "font:20px;" "border-radius:10px;}" "QProgressBar::chunk{" "border-radius:5px;" "border:1px solid black;" "background-color:skyblue;" "width:10px;margin:1px;}" );
progressBar->setRange(0, 100);
value = 0;
progressBar->setValue(value);
progressBar->setFormat("充电中%p%");
timer = new QTimer(this); timer->start(100);
connect(timer, SIGNAL(timeout()),this, SLOT(timerTimeOut())); } MainWindow::~MainWindow() { } void MainWindow::timerTimeOut() {
value ++; progressBar->setValue(value);
if(value>100) value = 0; }
|
QFrame类
QFrame 继承 QWidget。 QFrame 类是有框架的窗口部件的基类,它绘制框架并且调用一个虚函数 drawContents()来填充这个框架。这个函数是被子类重新实现的。这里至少还有两个有用的函数: drawFrame()和 frameChanged()。
QPopupMenu 使用这个来把菜单“升高”,高于周围屏幕。 QProgressBar 有“凹陷”的外观。QLabel 有平坦的外观。这些有框架的窗口部件可以被改变。
QFrame::Shape 这个枚举类型定义了 QFrame 的框架所使用的外形。当前定义的效果有:
NoFrame - QFrame 不画任何东西
Box - QFrame 在它的内容周围画一个框
Panel - QFrame 画一个平板使内容看起来凸起或者凹陷
WinPanel - 像 Panel,但 QFrame 绘制三维效果的方式和 Microsoft Windows 95(及其它)的一样
ToolBarPanel - QFrame 调用 QStyle::drawToolBarPanel()
MenuBarPanel - QFrame 调用 QStyle::drawMenuBarPanel()
HLine - QFrame 绘制一个水平线,但没有框任何东西(作为分隔是有用的)
VLine - QFrame 绘制一个竖直线,但没有框任何东西(作为分隔是有用的)
StyledPanel - QFrame 调用 QStyle::drawPanel()
PopupPanel - QFrame 调用 QStyle::drawPopupPanel()
阴影风格有:
Plain 使用调色板的前景颜色绘制(没有任何三维效果)。
Raised 使用当前颜色组的亮和暗颜色绘制三维的凸起线。
Sunken 使用当前颜色组的亮和暗颜色绘制三维的凹陷线。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QFrame> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private:
QFrame *hline; QFrame *vline; }; #endif
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->setGeometry(0, 0, 800, 480);
hline = new QFrame(this);
hline->setGeometry(QRect(200, 100, 400, 40));
hline->setFrameShape(QFrame::HLine);
hline->setFrameShadow(QFrame::Sunken);
vline = new QFrame(this);
vline->setGeometry(QRect(300, 100, 2, 200));
vline->setFrameShape(QFrame::VLine);
vline->setFrameShadow(QFrame::Sunken); } MainWindow::~MainWindow() { }
|

QBoxLayout类
QBoxLayout 继承 QLayout。 QBoxLayout 类提供水平或垂直地排列子部件。 QBoxLayout 获取从它的父布局或从 parentWidget()中所获得的空间,将其分成一列框,并使每个托管小部件填充一个框。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #ifndef MAINWINDOW_H #define MAINWINDOW_H
#include <QMainWindow> #include <QHBoxLayout> #include <QVBoxLayout> #include <QPushButton> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: QPushButton *pushButton[6]; QWidget *hWidget; QWidget *vWidget; QHBoxLayout *hLayout; QVBoxLayout *vLayout; }; #endif
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include "mainwindow.h" #include <QList> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->setGeometry( 0 , 0, 800, 480); hWidget = new QWidget(this); hWidget -> setGeometry( 0 , 0, 800, 240); vWidget = new QWidget(this); vWidget -> setGeometry( 0, 240, 800, 240); hLayout = new QHBoxLayout(); vLayout = new QVBoxLayout(); QList<QString>list; list<<"one"<<"two"<<"three"<<"four"<<"five"<<"six"; for(int i = 0; i < 6; i++) { pushButton[i] = new QPushButton(); pushButton[i]->setText(list[i]); if(i < 2) { hLayout->addWidget(pushButton[i]); }else{ vLayout->addWidget(pushButton[i]); } } hLayout->setSpacing(50); hWidget->setLayout(hLayout); vWidget->setLayout(vLayout); } MainWindow::~MainWindow() { }
|

QFormLayout布局
QFormLayout 继承 QLayout。 QFormLayout 类管理输入小部件及其关联标签的表单。 QFormLayout 是一个方便的布局类,它以两列的形式布局其子类。左列由标签组成,右列由“字段”小部件(QLineEdit(行编辑器)、 QSpinBox(旋转框等))组成。
可以用来规划用户密码登录的界面布局。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #ifndef MAINWINDOW_H #define MAINWINDOW_H
#include <QMainWindow> #include <QFormLayout> #include <QLineEdit> class MainWindow : public QMainWindow { Q_OBJECT
public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: QWidget *fwidget; QLineEdit *userLineEdit; QLineEdit *passwordLineEdit; QFormLayout *formLayout; }; #endif
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->setGeometry( 0, 0, 800, 480); fwidget = new QWidget(this); fwidget ->setGeometry( 250, 100, 300, 200 ); userLineEdit = new QLineEdit(); passwordLineEdit = new QLineEdit(); formLayout = new QFormLayout(); formLayout ->addRow("用户名",userLineEdit); formLayout ->addRow("密码", passwordLineEdit); formLayout->setSpacing(10); formLayout->setMargin(20); fwidget->setLayout(formLayout); } MainWindow::~MainWindow() { }
|

QSpacerItem
QSpacerItem 继承 QLayoutItem。 QSpacerItem 类在布局中提供空白(空间间隔)。所以 QSpacerItem 是在布局中使用的。
可以用来布局一些按钮图标之类的。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QPushButton> #include <QBoxLayout>
class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: QPushButton *bt[4]; QSpacerItem *vSpacer; QSpacerItem *hSpacer; QWidget *widget; QHBoxLayout *mainLayout; QVBoxLayout *vBoxLayout; QHBxoLayout *hBoxLayout; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent) { this->setGeometry( 0, 0, 800, 480); widget = new QWidget(this); this->setCentralWidget(widget); vSpacer = new QSpacerItem( 10 , 10, QSizePolicy::Minimum, QSizePolicy::Expanding); hSpacer = new QSpacerItem( 10 , 10, QSizePolicy::Expanding, QSizePolicy :: Minimum); vBoxLayout = new QVBoxLayout(); hBxoLayout = new QHBoxLayout(); mainLayout = new QHBoxLayout(); vBoxLayout->addSpacerItem(vSpacer); QList <QString>list; list << "按钮1"<< " 按钮2"<< "按钮3"<< "按钮4"; for(int i = 0; i < 4; i++) { bt[i] = new QPushButton(); bt[i] = setText(list[i]); bt[i] ->setFixedSize( 60, 60); hBoxLayout->addWidget(bt[i]); } hBoxLayout->addSpacerItem(hSpacer); mainLayout->addLayout(vBoxLayout); mainLayout->addLayout(hBoxLayout); mainLayout->setSpacing(50); widget->setLayout(mainLayout); }
|
SpinBox,DoubleSpinBox控件(数值调整控件)
数字显示框,显示整型和浮点型的数字。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QDoubleSpinbox> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: QDoubleSpinBox *doubleSpinBox; } #endif
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent) { this->setGeometry( 0, 0, 800, 480); doubleSpinBox = new QDoubleSpinBox(this); doubleSpinBox ->setGeometry(300, 200, 200, 20); doubleSpinBox->setPrefix("激光功率"); doubleSpinBox->setSuffix("%"); doubleSpinBox->setRange(00.00, 100.00); doubleSpinBox->setValue(20.00); doubleSpinBox->setSingleStep(0.1); }
|