QT 控件使用案例

news2024/9/22 14:26:49
  • 常用控件
    • 表单
  • 按钮
    • Push Button 命令按钮。
    • Tool Button:工具按钮。
    • Radio Button:单选按钮。
    • Check Box:复选框按钮。
    • Command Link Button:命令链接按钮。
    • Dialog Button Box:按钮盒。
  • 容器组控件(Containers)
    • Group Box:组合框。
    • Scroll Area:滚动区域。
    • Tool Box:工具箱。
    • Tab Widget:标签小部件。
    • Stacked Widget:堆叠部件。
    • Frame:框架。
    • Dock Widget:停靠窗体部件。
  • Item View控件(Item Views)
    • List View:清单视图。
    • Tree View:树视图。
    • Table View:表视图。
    • Column View:列视图。
    • Undo View:撤销视图。
  • Input Widgets控件(Input Widgets)
    • List Widget:清单控件。
    • Tree Widget:树控件。
    • Table Widget:表控件。
  • Input Widgets控件(Input Widgets)
    • Combo Box:组合框
    • Font Combo Box:字体组合框
    • Line Edit:行编辑框
    • Text Edit:文本编辑框
    • Plain Text Edit:纯文本编辑框
    • Spin Box:数值框
    • Double Spin Box:双精度数值框
    • Date Edit:日期编辑框
    • Time Edit:时间编辑框
    • DateTime Edit:日期时间编辑框
    • Dial:拨号盘
    • Horizonal Slider Bar: 水平滑动条
    • Vertical Slider Bar: 垂直滑动条
    • Horizontal Slider: 水平滑块
    • Vertical Slider: 垂直滑块
    • File Dialog:文件对话框
    • Key Sequence Edit:快捷键编辑框
  • Display Widgets: 显示控件
    • Label:标签
    • Text Browser:文本浏览器
    • Graphics View:图形视图
    • Calendar Widget:日历控件
    • LCD Number:LCD数字
    • Progress Bar:进度条
    • Status Bar:状态栏
    • Horizontal Line : 水平线
    • Vertical Line : 垂直线
    • OpenGl Widget : OpenGL控件
    • QQuickWidget : Qt Quick控件

常用控件

在这里插入图片描述

Vertical Layout:垂直布局。

Horizontal Layout:横向(水平)布局。

Grid Layout:网格(栅格)布局。

Form Layout:表单布局。

Horizontal Spacer:水平间隔。

Vertical Spacer:垂直间隔。

表单

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QPushButton> //命令按钮控制头文件
#include <QLabel> //显示标签头文件
#include <QGridLayout> //网格布局头文件
#include <QFormLayout>
#include <QLineEdit>
class MainWindow : public QMainWindow
{
    Q_OBJECT  使用 Q_OBJECT 宏声明这是一个 QObject 派生类,启用 Qt 的元对象系统

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    QGridLayout *gridLayout; //网格布局对象

    QPushButton *button1;
    QPushButton *button2;
    QPushButton *button3;
    QPushButton *button4;

};
#endif // MAINWINDOW_H

源文件:

#include "mainwindow.h"
# if 0
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    // 创建一个中心窗口部件
    QWidget *centralWidget = new QWidget(this);
    setCentralWidget(centralWidget);
    // 创建一个栅格布局
    QGridLayout *gridLayout = new QGridLayout(centralWidget);
    gridLayout->setContentsMargins(10,10,10,10);//设置边距
    gridLayout->setSpacing(10);//设置间距


    //设置按钮
    button1= new QPushButton("按钮1", this);
    button1->setFixedHeight(50);//设置按钮高度
    button1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//设置按钮大小策略


    button2= new QPushButton("按钮2", this);
    button2->setFixedWidth(50);//设置按钮宽度
    button2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//设置按钮大小策略


    button3= new QPushButton("按钮3", this);
    button3->setFixedHeight(50);//设置按钮高度
    button3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//设置按钮大小策略

    button4= new QPushButton("按钮4", this);
    button4->setFixedWidth(50);//设置按钮宽度
    button4->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//设置按钮大小策略


    //@param parent 对象
    //@param row 行号
    //@param column 列号
    //@param rowSpan 跨行数
    //@param columnSpan 跨列数
    //@param alignment 对齐方式
    gridLayout->addWidget(button1,0,1,1,1);//设置按钮在网格布局的位置
    gridLayout->addWidget(button2,0,0,3,1);//设置按钮在网格布局的位置
    gridLayout->addWidget(button3,2,1,1,2);//设置按钮在网格布局的位置
    gridLayout->addWidget(button4,1,1,1,1);//设置按钮在网格布局的位置
    setLayout(gridLayout);
}

MainWindow::~MainWindow() {}

#endif



MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
{
    // 创建一个中心窗口部件
    QWidget *centralWidget = new QWidget(this);
    setCentralWidget(centralWidget);

    //创建一个表单布局
    QFormLayout *formLayout = new QFormLayout(centralWidget);
    QLineEdit *line1 = new QLineEdit(this);//创建输入框
    QLineEdit *line2 = new QLineEdit(this);
    QLineEdit *line3 = new QLineEdit(this);

    formLayout->addRow("姓名:", line1);//添加行
    formLayout->addRow("年龄:", line2);
    formLayout->addRow("性别:", line3);
    formLayout->setContentsMargins(10,10,10,10);//设置边距
    formLayout->setSpacing(10);//设置间距

    //formLayout->setRowWrapPolicy(QFormLayout::DontWrapRows);//设置不换行
    formLayout->setRowWrapPolicy(QFormLayout::WrapLongRows);//设置包装长行
    formLayout->setLabelAlignment(Qt::AlignLeft);//设置标签对齐方式为左对齐

    setLayout(formLayout);

}

MainWindow::~MainWindow() {}

按钮

在这里插入图片描述

Push Button:命令按钮。

Tool Button:工具按钮。

Radio Button:单选按钮。

Check Box:复选框按钮。

Command Link Button:命令链接按钮。

Dialog Button Box:按钮盒。

Push Button 命令按钮。

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
# include <QPushButton>
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private :
    QPushButton *button1;//按键1
    QPushButton *button2;
private slots:
    //声明按钮对应的槽函数
    void button1_clicked();
    void button2_clicked();

};
#endif // MAINWINDOW_H

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle("My App");
    //设置窗口大小
    //@Param1: 左上角x坐标
    //@Param2: 左上角y坐标
    //@Param3: 宽度
    //@Param4: 高度
    this->setGeometry(0, 0, 400, 200);

    //创建按钮
    button1 = new QPushButton("Button 1", this);
    button2 = new QPushButton("Button 2", this);

    //设置按钮位置
    //button1->move(100, 100);
    button1->setGeometry(20, 20, 100, 50);
    button2->setGeometry(20, 70, 100, 50);

    //链接信号槽
    connect(button1, SIGNAL(clicked()), this, SLOT(button1_clicked()));
    connect(button2, SIGNAL(clicked()), this, SLOT(button2_clicked()));




}

MainWindow::~MainWindow() {}


void MainWindow::button1_clicked(){
    //设置QMainWindow背景颜色
    this->setStyleSheet("QMainWindow{background-color:rgba(255,0,0,100);}");
}

void MainWindow::button2_clicked(){
    //设置QMainWindow背景颜色
    this->setStyleSheet("QMainWindow{background-color:rgba(0,0,0,0.5);}");
}

Tool Button:工具按钮。

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QApplication>
#include <QStyle> //引入QStyle类 ,样式
#include <QToolBar> //引入QToolBar类 ,工具条
#include <QToolButton> //引入QToolButton类 ,工具按钮
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QToolBar *toolBar; //工具条
    QToolButton *toolButton; //工具按钮
private slots:
};
#endif // MAINWINDOW_H

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //设置窗口运行位置
    this->setGeometry(0, 0, 400, 300);

    //实例化工具栏
    toolBar = new QToolBar(this);
    //设置工具栏位置
    toolBar->setGeometry(20, 20, 100, 100);

    //实例化QStyle对象
    QStyle *style = QApplication::style();

    QIcon icon = style->standardIcon(QStyle::SP_TitleBarContextHelpButton);

    //实例化ToolButton对象
    toolButton =new QToolButton();
    toolButton->setIcon(icon);//设置按钮图标
    toolButton->setText("Help");//设置按钮提示信息
    toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//设置按钮样式

    //添加按钮到工具栏
    toolBar->addWidget(toolButton);
    
}

MainWindow::~MainWindow() {}

Radio Button:单选按钮。

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QRadioButton>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    //声明Radio Button
    QRadioButton *radioButton1, *radioButton2;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0, 0, 400, 300);
    this->setStyleSheet("QMainWindow{background-color:rgba(20,50,40,20%);}");
    //实例化Radio Button
    radioButton1= new QRadioButton("radioButton1",this);
    radioButton2= new QRadioButton("radioButton2",this);
    //设置Radio Button的位置
    radioButton1->setGeometry(10, 10, 100, 30);
    radioButton2->setGeometry(120, 10, 100, 30);
    //设置默认选中radioButton1
    radioButton1->setChecked(true);
}

MainWindow::~MainWindow() {}

Check Box:复选框按钮。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QCheckBox>
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private:
    QCheckBox *checkBox;


private slots:
    void checkBoxClicked(int);
};
#endif // MAINWINDOW_H

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0, 0, 400, 300);
    this->setStyleSheet("QMainWindow {background-color: rgba(43, 76, 0, 40%);}");

    //实例化QCheckBox对象
    checkBox = new QCheckBox(this);
    //设置QCheckBox的位置和大小
    //@Param1: 左上角x坐标
    //@Param2: 左上角y坐标
    //@Param3: 宽度
    //@Param4: 高度
    checkBox->setGeometry(100, 100, 200, 20);

    checkBox->setCheckState(Qt::Checked);//设置初始状态为选中
    //设置显示文本
    checkBox->setText("复选");
    //设置字体颜色
    checkBox->setStyleSheet("color: white;");
    checkBox->setTristate();//开启三态

    connect(checkBox, SIGNAL(stateChanged(int)), this, SLOT(checkBoxClicked(int)));

}

MainWindow::~MainWindow() {}


void MainWindow::checkBoxClicked(int state){
    //判断checkBox的状态
    switch (state) {
    case Qt::Checked:
        qDebug() << "复选框被选中";
        checkBox->setText("复选框被选中");
        break;

    case Qt::PartiallyChecked:
        qDebug() << "复选框部分选中";
        checkBox->setText("复选框部分选中");
        break;

    case Qt::Unchecked:
        qDebug() << "复选框未选中";
        checkBox->setText("复选框未选中");
        break;
    }
}

Command Link Button:命令链接按钮。

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QCommandLinkButton> //引入Command Link Button控件
#include <QDesktopServices>//引入桌面服务
#include <QUrl>//引入URL
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public:
    //声明Command Link Button
    QCommandLinkButton *cmdLinkButton;
public slots:
    void on_cmdLinkButton_clicked();
};
#endif // MAINWINDOW_H

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0,0,400,300);
    this->setStyleSheet("QMainWindow {background-color: rgba(43, 76, 0, 40%);}");
    //设置标题
    cmdLinkButton = new QCommandLinkButton("标题","内容",this);
    cmdLinkButton->setGeometry(100,100,200,80);

    connect(cmdLinkButton,SIGNAL(clicked()),this,SLOT(on_cmdLinkButton_clicked()));

}

MainWindow::~MainWindow() {}


void MainWindow::on_cmdLinkButton_clicked(){

    //调用操作系统打开浏览器
    QDesktopServices:: openUrl(QUrl("https://www.baidu.com"));
}

Dialog Button Box:按钮盒。

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDialogButtonBox> //引入按钮盒
#include <QPushButton> //引入按钮
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public:
    QDialogButtonBox *buttonBox;//按钮盒
    QPushButton *pushButton1;//按钮
    QPushButton *pushButton2;//按钮

public slots:

void on_pushButton_clicked(QAbstractButton *button);

};
#endif // MAINWINDOW_H

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0, 0, 400, 300);
    buttonBox= new QDialogButtonBox(this);
    pushButton1= new QPushButton("自定义Button 1", this);
    //pushButton2= new QPushButton("Button 2", this);

    buttonBox->setGeometry(30,30,200,80);

    buttonBox->addButton(QDialogButtonBox::Cancel)->setText("取消");//添加取消按钮

    buttonBox->addButton(pushButton1,QDialogButtonBox::AcceptRole);//添加自定义按钮

    //讲信号与槽连接起来
    connect(buttonBox, SIGNAL(clicked(QAbstractButton *)),
            this, SLOT(on_pushButton_clicked(QAbstractButton *)));

}

MainWindow::~MainWindow() {}

void MainWindow::on_pushButton_clicked(QAbstractButton *button){
    if(button==buttonBox->button(QDialogButtonBox::Cancel)){
        qDebug("取消按钮被点击了");
    } else if (button==pushButton1){
        qDebug("自定义按钮1被点击了");
    }
}

容器组控件(Containers)

在这里插入图片描述

Group Box:组合框:提供带有标题的组合框框架。

Scroll Area:滚动区域。

Tool Box:工具箱。

Tab Widget:标签小部件。

Stacked Widget:堆叠部件。

Frame:框架。

Widget:小部件。

Mdi Area:MDI 区域。

Dock Widget:停靠窗体部件。

QAxWidget:封装 Flash 的 ActiveX 控件。

Group Box:组合框。

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGroupBox>
#include <QGridLayout>
#include <QRadioButton>
#include <QPushButton>
#include <QCheckBox>
#include <QMenu>
#include <QVBoxLayout> //可以在水平方向和垂直方向进行排列的控件 QHboxLayout/QVBoxLayout 所继承
class MainWindow : public QWidget
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
};
#endif // MAINWINDOW_H

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
    //组合框 1:
    QGroupBox *group1 = new QGroupBox("Group1");//创建groupBox
    QRadioButton *button1 = new QRadioButton("Button1");//创建按钮
    QRadioButton *button2 = new QRadioButton("Button2");//创建按钮
    QRadioButton *button3 = new QRadioButton("Button3");//创建按钮


    QVBoxLayout *layout = new QVBoxLayout();//创建垂直布局
    layout->addWidget(button1);//添加按钮到布局
    layout->addWidget(button2);
    layout->addWidget(button3);
    group1->setLayout(layout);//设置groupBox的布局

    //组合框 2:
    QGroupBox *group2 = new QGroupBox("Group2");//创建groupBox
    QCheckBox *button4 = new QCheckBox("Button4");//创建按钮
    QCheckBox *button5 = new QCheckBox("Button5");//创建按钮
    QCheckBox *button6 = new QCheckBox("Button6");//创建按钮
    button4->setTristate(true);//设置复选框为三状态

    button5->setChecked(true);//设置复选框为选中状态

    QVBoxLayout *layout2 = new QVBoxLayout();//创建垂直布局
    layout2->addWidget(button4);//添加按钮到布局
    layout2->addWidget(button5);
    layout2->addWidget(button6);
    group2->setLayout(layout2);//设置groupBox的布局


    //组合框 3:
    QGroupBox *group3 =new QGroupBox("Group3");//创建groupBox
    group3->setCheckable(true);//设置groupBox为可选中

    QRadioButton *button7 = new QRadioButton("Button1");
    QRadioButton *button8 = new QRadioButton("Button2");
    QCheckBox *button9 = new QCheckBox("Button3");

    QHBoxLayout *layout3 = new QHBoxLayout();//创建水平布局
    layout3->addWidget(button7);//添加按钮到布局
    layout3->addWidget(button8);
    layout3->addWidget(button9);
    group3->setLayout(layout3);//设置groupBox的布局


    //组合框 4:
    QGroupBox *group4 =new QGroupBox("Group4");//创建groupBox
    group4->setCheckable(true);//设置groupBox为可选中
    group4->setChecked(true);//设置groupBox为选中状态

    QPushButton *button10 = new QPushButton("Button1");

    //创建子菜单
    QMenu *menu = new QMenu(this);//创建菜单
    menu->addAction("Action1");//添加菜单项
    menu->addAction("Action2");
    menu->addAction("Action3");
    button10->setMenu(menu);//设置按钮的菜单


    QHBoxLayout *layout4 = new QHBoxLayout();//创建水平布局
    layout4->addWidget(button10);//添加按钮到布局
    group4->setLayout(layout4);//设置groupBox的布局





    QGridLayout* mainLayout = new QGridLayout(this);//创建主布局
    mainLayout->addWidget(group1, 0, 0, 1, 2);//添加groupBox到主布局的第一行第一列,占1行两列
    mainLayout->addWidget(group2, 0, 2, 1, 2);//添加groupBox到主布局的第一行第一列,占1行两列
    mainLayout->addWidget(group3, 0, 4, 1, 2);//添加groupBox到主布局的第一行第一列,占1行两列
    mainLayout->addWidget(group4, 4, 0, 1, 2);//添加groupBox到主布局的第一行第一列,占1行两列

    this->setLayout(mainLayout);//设置主布局
}

MainWindow::~MainWindow() {}

Scroll Area:滚动区域。

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QVBoxLayout>
#include <QScrollArea>
#include <QLabel>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    QVBoxLayout *mainLayout; //声明一个垂直布局
    QScrollArea *scrollArea; //声明一个滚动区域
    QWidget *contentWidget; //声明一个内容部件
    QVBoxLayout *contentLayout; //声明一个内容布局
};
#endif // WIDGET_H

#include "widget.h"

Widget::Widget(QWidget *parent)
        : QWidget(parent) {
    // 创建主布局
    mainLayout = new QVBoxLayout(this);// 创建垂直布局

    // 创建滚动区域
    scrollArea = new QScrollArea(this);
    scrollArea->setWidgetResizable(true);// 设置滚动区域可伸缩

    // 创建内容小部件
    contentWidget = new QWidget();
    scrollArea->setWidget(contentWidget);

    // 为内容小部件创建布局
    contentLayout = new QVBoxLayout(contentWidget);// 创建垂直布局

    // 添加一些标签到内容布局中
    for (int i = 0; i < 50; ++i) {
        // 创建标签
        //@param text 标签文本
        //@param parent 父对象
        QLabel *label = new QLabel(QString("Label %1").arg(i), contentWidget);
        contentLayout->addWidget(label);//添加到布局中
    }

    // 将滚动区域添加到主布局中
    mainLayout->addWidget(scrollArea);

    // 设置窗口属性
    this-> setLayout(mainLayout);
    this->setWindowTitle("QScrollArea 示例");
    this->resize(300, 200);


}

Widget::~Widget() {
    // 清理资源
}

Tool Box:工具箱。

#include <QApplication>
#include <QToolBox>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QWidget>

int main(int argc, char *argv[]) {
    // 创建QApplication实例,这是Qt应用程序的入口点
    QApplication app(argc, argv);

    // 创建一个QToolBox实例,用于管理多个工具选项卡
    QToolBox toolBox;

    // 创建第一个选项卡的内容
    QWidget *page1 = new QWidget();  // 创建一个QWidget实例,作为第一个选项卡的内容容器
    QVBoxLayout *layout1 = new QVBoxLayout(page1);  // 创建一个垂直布局管理器,并将其设置为page1的布局
    QPushButton *button1 = new QPushButton("Button 1");  // 创建一个按钮,显示文本为"Button 1"
    QLabel *label1 = new QLabel("Label 1");  // 创建一个标签,显示文本为"Label 1"
    layout1->addWidget(button1);  // 将按钮添加到布局中
    layout1->addWidget(label1);  // 将标签添加到布局中
    toolBox.addItem(page1, "Tab 1");  // 将page1添加到ToolBox中,选项卡标题为"Tab 1"

    // 创建第二个选项卡的内容
    QWidget *page2 = new QWidget();  // 创建一个QWidget实例,作为第二个选项卡的内容容器
    QVBoxLayout *layout2 = new QVBoxLayout(page2);  // 创建一个垂直布局管理器,并将其设置为page2的布局
    QLineEdit *lineEdit2 = new QLineEdit();  // 创建一个单行输入框
    QLabel *label2 = new QLabel("Label 2");  // 创建一个标签,显示文本为"Label 2"
    layout2->addWidget(lineEdit2);  // 将输入框添加到布局中
    layout2->addWidget(label2);  // 将标签添加到布局中
    toolBox.addItem(page2, "Tab 2");  // 将page2添加到ToolBox中,选项卡标题为"Tab 2"

    // 创建第三个选项卡的内容
    QWidget *page3 = new QWidget();  // 创建一个QWidget实例,作为第三个选项卡的内容容器
    QVBoxLayout *layout3 = new QVBoxLayout(page3);  // 创建一个垂直布局管理器,并将其设置为page3的布局
    QPushButton *button3 = new QPushButton("Button 3");  // 创建一个按钮,显示文本为"Button 3"
    QLineEdit *lineEdit3 = new QLineEdit();  // 创建一个单行输入框
    layout3->addWidget(button3);  // 将按钮添加到布局中
    layout3->addWidget(lineEdit3);  // 将输入框添加到布局中
    toolBox.addItem(page3, "Tab 3");  // 将page3添加到ToolBox中,选项卡标题为"Tab 3"

    // 显示ToolBox
    toolBox.show();

    // 进入Qt应用程序的主事件循环,等待用户交互
    return app.exec();
}

Tab Widget:标签小部件。

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTabWidget>
#include <QPushButton>
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QTabWidget *tabWidgetUI;
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setWindowTitle("选项卡小部件");
    this->setGeometry(0, 0, 800, 600);

    tabWidgetUI  = new QTabWidget(this);//创建选项卡小部件
    tabWidgetUI->setGeometry(10, 10, 400, 300);//设置选项卡小部件的位置和大小
    tabWidgetUI->show();//显示选项卡小部件

    // 创建第一个选项卡
    QWidget *page1 = new QWidget();
    QVBoxLayout *layout1 = new QVBoxLayout(page1);
    QPushButton *button1 = new QPushButton("Button 1");
    QLabel *label1 = new QLabel("Label 1");
    layout1->addWidget(button1);
    layout1->addWidget(label1);
    tabWidgetUI->addTab(page1, "Tab 1");
    // 创建第二个选项卡
    QWidget *page2 = new QWidget();
    QVBoxLayout *layout2 = new QVBoxLayout(page2);
    QLabel *label2 = new QLabel("Label 2");
    layout2->addWidget(label2);
    tabWidgetUI->addTab(page2, "Tab 2");

    // 创建第三个选项卡
    QWidget *page3 = new QWidget();
    QVBoxLayout *layout3 = new QVBoxLayout(page3);
    QPushButton *button3 = new QPushButton("Button 3");
    layout3->addWidget(button3);
    tabWidgetUI->addTab(page3, "Tab 3");

}

MainWindow::~MainWindow()
{
    delete ui;
}

Stacked Widget:堆叠部件。

Frame:框架。

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "./ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setStyleSheet("background-color: white; ");
    this->setWindowTitle("My Widget");
    //设置背景颜色
    ui->frame_1->setStyleSheet("background-color: yellow;");
    ui->frame_2->setStyleSheet("background-color: green;");
    ui->frame_1->setLineWidth(3);//设置边框宽度
    ui->frame_1->setFrameShape(QFrame::Box);//设置边框样式
    ui->frame_2->setFrameShape(QFrame::Panel);//设置边框样式
}

Widget::~Widget()
{
    delete ui;
}

Dock Widget:停靠窗体部件。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDockWidget>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QDockWidget *dockWidget = new QDockWidget("Dock Widget", this);//创建Dock Widget
    dockWidget->setMaximumSize(300, 200);//设置最大尺寸
    dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);//设置允许停靠的区域

}

MainWindow::~MainWindow()
{
    delete ui;
}

Item View控件(Item Views)

在这里插入图片描述

List View:清单视图。

Tree View:树视图。

Table View:表视图。

Column View:列视图。

Undo View:撤销视图。

List View:清单视图。

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QListView>
#include <QStringListModel>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
     QListView *listView1;
private slots:
    void onclicked(const QModelIndex &index);
};
#endif // WIDGET_H
#include "widget.h"
#include "./ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->resize(400, 300);
    //创建listview
    listView1=new QListView(this);
    listView1->setGeometry(0,0,200,200);

    //创建字符串列表
    QStringList qlist;
    qlist.append("item1");
    qlist.append("item2");
    qlist.append("item3");

    //创建清单模型
    QStringListModel *model=new QStringListModel(qlist);
    ///将模型添加到listview中
    listView1->setModel(model);
    //设置点击事件
    connect(listView1,SIGNAL(clicked(QModelIndex)),this,SLOT(onclicked(QModelIndex)));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::onclicked(const QModelIndex &index){
    QMessageBox::information(this,"提示","你点击了"+index.data().toString());
}

Tree View:树视图。

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStandardItemModel>//标准项目型号
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    //初始化树控件视图
    void initTreeView();
    QStandardItemModel *model;



};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    initTreeView();
}

MainWindow::~MainWindow()
{
    delete ui;
}

//初始化树形控件
void MainWindow::initTreeView(){
    //构造模型
    model=new QStandardItemModel(ui->treeView);
    model->setHorizontalHeaderLabels(QStringList()<<"名称"<<"大小"<<"类型");

    //添加节点
    QList<QStandardItem*> root;

    QStandardItem *item1=new QStandardItem("节点");
    QStandardItem *item2= new QStandardItem("100M");


    root.append(item1);
    root.append(item2);


    model->appendRow(root);
    //设置节点的子节点
    QList<QStandardItem*> root1;

    QStandardItem *item3=new QStandardItem("子节点");
    //QStandardItem *item4= new QStandardItem("50M");

    root1.append(item3);
    //root1.append(item4);

    item1->appendRow(root1);
    //设置节点的子节点的z子节点
    QList<QStandardItem*> root2;
    QStandardItem *item5=new QStandardItem("子子节点");
    //QStandardItem *item6= new QStandardItem("50M");
    root2.append(item5);
   // root2.append(item6);

    item3->appendRow(root2);



    ui->treeView->setModel(model);
}

Table View:表视图。

头文件:


#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    void InitTableViews();
};
#endif // MAINWINDOW_H
#include <QStandardItemModel>
#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    InitTableViews();
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::InitTableViews(){
    //添加表头,准备数据模型
    //创建一个数据模型,设置行数和列数
    QStandardItemModel *model = new QStandardItemModel();
    model->setHorizontalHeaderItem(0, new QStandardItem("姓名"));
    model->setHorizontalHeaderItem(1, new QStandardItem("年龄"));
    model->setHorizontalHeaderItem(2, new QStandardItem("性别"));
    model->setHorizontalHeaderItem(3, new QStandardItem("电话"));
    //添加数据
    model->setItem(0, 0, new QStandardItem("张三"));
    model->setItem(0, 1, new QStandardItem("25"));
    model->setItem(0, 2, new QStandardItem("男"));
    model->setItem(0, 3, new QStandardItem("13812345678"));
    model->setItem(1, 0, new QStandardItem("李四"));
    model->setItem(1, 1, new QStandardItem("26"));
    model->setItem(1, 2, new QStandardItem("女"));
    model->setItem(1, 3, new QStandardItem("13812345679"));


    //设置模型到表格视图
    ui->tableView->setModel(model);
    //设置大小
    ui->tableView->resizeColumnsToContents();//根据内容调整列的大小
    ui->tableView->resizeRowsToContents();//根据内容调整行的大小
    //设置禁止编辑
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//无编辑触发器
    //排序
    ui->tableView->setSortingEnabled(true);//设置排序已启用
}

Column View:列视图。

Undo View:撤销视图。

Input Widgets控件(Input Widgets)

在这里插入图片描述

List Widget:清单控件

Tree Widget:树控件

Table Widget:表控件

List Widget:清单控件。

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //注释: 这里是添加一个新的 QListWidgetItem 到 QListWidget 中
    QListWidgetItem *item = new QListWidgetItem(ui->listWidget);
    item->setText("New Item");
    item->setTextAlignment(Qt::AlignCenter);

    //注释: 这里是添加多个 QListWidgetItem 到 QListWidget 中
    QStringList list;
    list << "Item 1" << "Item 2" << "Item 3";
    ui->listWidget->addItems(list);
}

MainWindow::~MainWindow()
{
    delete ui;
}

Tree Widget:树控件。

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTreeWidget>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //测试TreeWidget

    //去掉头部的标题
    ui->treeWidget->header()->close();

    QTreeWidgetItem *item1 = new QTreeWidgetItem(ui->treeWidget);
    item1->setText(0, "Item 1");
    item1->setCheckState(0, Qt::Checked);


    QTreeWidgetItem *item2 = new QTreeWidgetItem(ui->treeWidget);
    item2->setText(0, "Item 2");
    item2->setCheckState(0, Qt::Checked);
    QTreeWidgetItem *item3 = new QTreeWidgetItem(item2);
    item3->setText(0, "Item 3");
    item3->setCheckState(0, Qt::Checked);
    QTreeWidgetItem *item4 = new QTreeWidgetItem(item2);
    item4->setText(0, "Item 4");
    item4->setCheckState(0, Qt::Checked);
    QTreeWidgetItem *item5 = new QTreeWidgetItem(item4);
    item5->setText(0, "Item 5");
    item5->setCheckState(0, Qt::Checked);
    QTreeWidgetItem *item6 = new QTreeWidgetItem(item4);
    item6->setText(0, "Item 6");
    item6->setCheckState(0, Qt::Checked);
    QTreeWidgetItem *item7 = new QTreeWidgetItem(item6);
    item7->setText(0, "Item 7");
    item7->setCheckState(0, Qt::Checked);

    //设置默认展开
    ui->treeWidget->expandAll();
    
}

MainWindow::~MainWindow()
{
    delete ui;
}


Table Widget:表控件。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //设置表格的列数和行数
    ui->tableWidget->setColumnCount(3);//设置列数
    ui->tableWidget->setRowCount(10);//设置行数
    //设置表格的标题
    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
    //设置单元格的值
    ui->tableWidget->setItem(0,0,new QTableWidgetItem("张三"));
    ui->tableWidget->setItem(0,1,new QTableWidgetItem("男"));
    ui->tableWidget->setItem(0,2,new QTableWidgetItem("25"));
    ui->tableWidget->setItem(1,0,new QTableWidgetItem("李四"));
    ui->tableWidget->setItem(1,1,new QTableWidgetItem("女"));
    ui->tableWidget->setItem(1,2,new QTableWidgetItem("30"));
    ui->tableWidget->setItem(2,0,new QTableWidgetItem("王五"));
    ui->tableWidget->setItem(2,1,new QTableWidgetItem("男"));
    ui->tableWidget->setItem(2,2,new QTableWidgetItem("20"));

    //循环设置数据
    for(int i=3;i<6;i++) {
        for (int j = 0; j < 3; j++) {
            ui->tableWidget->setItem(i, j, new QTableWidgetItem(QString("第%1行第%2列").arg(i).arg(j)));

        }

    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

Input Widgets控件(Input Widgets)

在这里插入图片描述

Combo Box:组合框

Font Combo Box:字体组合框

Line Edit:行编辑框

Text Edit:文本编辑框

Plain Text Edit:纯文本编辑框

Spin Box:数值框

Double Spin Box:双精度数值框

Date Edit:日期编辑框

Time Edit:时间编辑框

DateTime Edit:日期时间编辑框

Dial:拨号盘

Horizonal Slider Bar: 水平滑动条

Vertical Slider Bar: 垂直滑动条

Horizontal Slider: 水平滑块

Vertical Slider: 垂直滑块

File Dialog:文件对话框

Key Sequence Edit:快捷键编辑框

Combo Box:组合框

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QComboBox>
# include <QMessageBox>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QComboBox *comboBox; //定义一个QComboBox对象
    Ui::MainWindow *ui;
private slots:
    void combBoxChanged(int); //槽函数
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("My App");
    this->setGeometry(0,0,400, 300);

    //测试Combo Box
    QComboBox *comboBox = new QComboBox(this);//创建ComboBox对象
    comboBox->setGeometry(100, 100, 100, 30);//设置位置和大小
    comboBox->addItem("Item1");//添加选项
    comboBox->addItem("Item2");
    comboBox->addItem("Item3");
    comboBox->addItem("Item4");
    comboBox->addItem("Item5");
    //测试信号与槽
    connect(comboBox, SIGNAL(currentIndexChanged(int)),
            this, SLOT(combBoxChanged(int)));//连接信号与槽

}
void MainWindow::combBoxChanged(int index){
    qDebug() << "选择了第" << index << "项";
}//槽函数

MainWindow::~MainWindow()
{
    delete ui;
}

Font Combo Box:字体组合框

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFontComboBox>
#include <QLabel>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QFontComboBox *fontComboBox;
    QLabel *label;
    Ui::MainWindow *ui;
private slots:
    void FontFunc(QFont);
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    fontComboBox = new QFontComboBox(this);
    label=new QLabel(this);
    fontComboBox->setGeometry(10,10,100,30);
    label->setGeometry(10,50,200,30);

    connect(fontComboBox, SIGNAL(currentFontChanged(QFont)),
            this, SLOT(FontFunc(QFont)));

}
void MainWindow::FontFunc(QFont font){

    label->setFont(font);
    QString text="Hello World";
    label->setText(text);
}



MainWindow::~MainWindow()
{
    delete ui;
}

Line Edit:行编辑框

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLineEdit>
#include <QPushButton>
#include <QLabel>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QLineEdit *lineEdit;
    QPushButton *pushButton;
    QLabel *label;
    Ui::MainWindow *ui;

private slots:
    void on_pushButton_clicked();

};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    lineEdit = new QLineEdit(this);
    lineEdit->setGeometry(QRect(10, 10, 100, 30));
    pushButton = new QPushButton(this);
    pushButton->setGeometry(QRect(10, 50, 100, 30));
    pushButton->setText("Click me");
    connect(pushButton, SIGNAL(clicked()),
            this, SLOT(on_pushButton_clicked()));

    label = new QLabel(this);
    label->setGeometry(QRect(10, 90, 100, 30));
    label->setText("Hello World!");

}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked(){
    QString text = "输入:"+lineEdit->text();
    label->setText(text);
}



Text Edit:文本编辑框

Plain Text Edit:纯文本编辑框

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPlainTextEdit> //功能:显示文本框
#include <QRadioButton> //功能:单选按钮
#include <QDir>//功能:文件目录
#include <QTextStream>//功能:文本流
#include <QCoreApplication>//功能:应用

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QPlainTextEdit *textEdit;
    QRadioButton *radioButton;

    Ui::MainWindow *ui;


private slots:
    void QRadioButtonClicked();
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    textEdit=new QPlainTextEdit(this);//创建文本编辑器
    textEdit->setPlainText("Hello World!");//设置文本编辑器初始内容
    textEdit->setGeometry(10,10,300,300);//设置文本编辑器位置和大小

    radioButton=new QRadioButton(this);//创建单选按钮
    radioButton->setText("只读");//设置单选按钮文本
    radioButton->setGeometry(350,0,100,30);//设置单选按钮位置和大小

    //设置工作目录为可执行程序的目录
    QDir::setCurrent(QCoreApplication::applicationDirPath());
    QFile file("cmake_install.cmake");//读取文件
    file.open(QIODevice::ReadOnly | QIODevice::Text);//打开文件
    //加载文件内容到文本编辑器
    QTextStream in(&file);
    textEdit->setPlainText(in.readAll());




    //连接单选按钮点击信号与槽函数
    connect(radioButton,SIGNAL(clicked()),
            this,SLOT(QRadioButtonClicked()));

}


void MainWindow::QRadioButtonClicked(){
    //设置文本编辑器是否只读
    if(radioButton->isChecked()){
        textEdit->setReadOnly(true);
    }else{
        textEdit->setReadOnly(false);
    }
}


MainWindow::~MainWindow()
{
    delete ui;
}

Spin Box:数值框

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSpinBox>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QSpinBox *spinBox;
    Ui::MainWindow *ui;


private slots:
    void on_spinBox_valueChanged(int value);
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    spinBox = new QSpinBox(this);
    spinBox->setGeometry(100, 100, 200, 30);
    //设置范围
    spinBox->setRange(0, 100);
    //设置步长
    spinBox->setSingleStep(5);
    //设置初始值
    spinBox->setValue(100);
    //设置标签
    spinBox->setPrefix("透明度:");//设置前缀
    spinBox->setSuffix(" %");//设置后缀

    connect(spinBox, SIGNAL(valueChanged(int)),
            this, SLOT(on_spinBox_valueChanged(int)));
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::on_spinBox_valueChanged(int value){
    //根据值修改窗口背景透明度
    this->setWindowOpacity((double)value/100.0);
}

Double Spin Box:双精度数值框

Date Edit:日期编辑框

Time Edit:时间编辑框

DateTime Edit:日期时间编辑框

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
//时间相关
#include <QDateTime>
#include <QTimeEdit>
#include <QDateTimeEdit>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QDateTimeEdit *dateTimeEdit1;
    QTimeEdit *timeEdit1;
    QDateEdit *dateEdit1;
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //初始化一个QDateTimeEdit控件参数是当前时间
    dateTimeEdit1= new QDateTimeEdit(QDateTime::currentDateTime(), this);
    dateTimeEdit1->setGeometry(10, 10, 300, 30);

    timeEdit1= new QTimeEdit(QTime::currentTime(), this);
    timeEdit1->setGeometry(10, 50, 300, 30);

    dateEdit1= new QDateEdit(QDate::currentDate(), this);
    dateEdit1->setGeometry(10, 90, 300, 30);



    //设置控件的显示格式
    dateTimeEdit1->setDisplayFormat("yyyy-MM-dd HH:mm:ss");
    timeEdit1->setDisplayFormat("HH:mm:ss");
    dateEdit1->setDisplayFormat("yyyy-MM-dd");

}

MainWindow::~MainWindow()
{
    delete ui;
}



Dial:拨号盘

Horizonal Slider Bar: 水平滑动条

Vertical Slider Bar: 垂直滑动条

Horizontal Slider: 水平滑块

Vertical Slider: 垂直滑块

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QScrollBar> //包含滚动条头文件
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QScrollBar *verticalScrollBar;//垂直滚动条
    QScrollBar *horizontalScrollBar;//水平滚动条
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

#include <QStyleOptionSlider>
#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    verticalScrollBar=new QScrollBar(Qt::Vertical,this);//创建垂直滚动条
    verticalScrollBar->setGeometry(10,10,10,1000);
    verticalScrollBar->setRange(0,100);//设置滚动条范围
    verticalScrollBar->setValue(0);//设置滚动条初始值

    horizontalScrollBar=new QScrollBar(Qt::Horizontal,this);//创建水平滚动条
    horizontalScrollBar->setGeometry(10,10,1000,10);
    horizontalScrollBar->setRange(0,100);//设置滚动条范围
    horizontalScrollBar->setValue(0);//设置滚动条初始值




}

MainWindow::~MainWindow()
{
    delete ui;
}

File Dialog:文件对话框

Key Sequence Edit:快捷键编辑框

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QKeySequenceEdit>//功能:可编辑快捷键
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QKeySequenceEdit *keySequenceEdit;
    Ui::MainWindow *ui;


private slots:
    void keySequenceEditChanged(const QKeySequence & keySequence);
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    keySequenceEdit=new QKeySequenceEdit(this);
    keySequenceEdit->setGeometry(10,10,200,100);

    connect(keySequenceEdit,SIGNAL(keySequenceChanged(const QKeySequence &)),
            this,SLOT(keySequenceEditChanged(const QKeySequence &)));
}

void MainWindow::keySequenceEditChanged(const QKeySequence &key){
    if(!key.isEmpty()){//如果输入的快捷键为空,则不做任何处理
        if(key==QKeySequence(tr("Ctrl+Shift+A"))){ //tr()函数:用于翻译字符串 QKeySequence()函数:用于创建QKeySequence对象
            this->close();
        } else{
            qDebug()<<key.toString();
        }
    }
}



MainWindow::~MainWindow()
{
    delete ui;
}

Display Widgets: 显示控件

在这里插入图片描述

Label:标签

Text Browser:文本浏览器

Graphics View:图形视图

Calendar Widget:日历控件

LCD Number:LCD数字

Progress Bar:进度条

Status Bar:状态栏

Horizontal Line : 水平线

Vertical Line : 垂直线

OpenGl Widget : OpenGL控件

QQuickWidget : Qt Quick控件

Label:标签

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
private slots:
    void textlablefunc();
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    textlablefunc();
}

void MainWindow::textlablefunc(){
    QString fname = "A:\\QT_WORK\\q42\\image\\1.png";

    //创建QImage对象 功能是加载图片
    QImage *image = new QImage();
    //判断图片是否加载成功
    if(!image->load(fname)){
        qDebug() << "Failed to load image";
        QMessageBox::information(this, "Error", "Failed to load image");
        delete image;
        return;
    }
    //设置label的大小是图片的大小
    //ui->label->setFixedSize(image->width(), image->height());

    //图片适配label大小
    ui->label->setScaledContents(true);

    ui->label->setPixmap(QPixmap::fromImage(*image));

}



MainWindow::~MainWindow()
{
    delete ui;
}

Text Browser:文本浏览器

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFile>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:


    Ui::MainWindow *ui;


private slots:
    void textbrowserFunc();

};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    textbrowserFunc();
}

void MainWindow::textbrowserFunc(){

    //存储文件内容
    QString strData;

    QFile file("A:\\QT_WORK\\q43\\text.txt");

    //打开文件
    if(file.open(QIODevice::ReadOnly | QIODevice::Text)){

        QMessageBox::information(this, "提示", "文件打开成功!", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    }else{
        QMessageBox::warning(this, "警告", "文件打开失败!", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
        return;
    }
    //读取文件内容 atEnd()判断文件是否读取完毕
    while (!file.atEnd()){
        //读取一行内容到二进制数组中
        QByteArray line= file.readLine();
        QString strs(line);//将二进制数组转换为字符串
        strData.append(strs);
    }

    //显示文件内容
    ui->textBrowser->setText(strData);

}

MainWindow::~MainWindow()
{
    delete ui;
}

Graphics View:图形视图

Calendar Widget:日历控件

LCD Number:LCD数字

#ifndef MAINWINDOW_H
#define MAINWINDOW_H



#include <QMainWindow>
#include <QLCDNumber>
#include <QTimer>
#include <QPushButton>
#include <QVBoxLayout>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QLCDNumber *lcdNumber;
    QTimer *timer;
    QPushButton *startButton;
    QPushButton *stopButton;
    QPushButton *cleanButton;
    int seconds;
private slots:
    void updateTimer();
    void startTimer();
    void stopTimer();
    void cleanTimer();

};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent),seconds(0)

{
    // 创建QLCDNumber控件
    lcdNumber = new QLCDNumber(this);
    lcdNumber->setDigitCount(5);//设置显示的数字位数
    lcdNumber->setSegmentStyle(QLCDNumber::Flat); //设置显示样式为平面样式
    lcdNumber->display("00000");//设置初始显示值

    // 创建开始和停止按钮
    startButton = new QPushButton("开始", this);
    stopButton = new QPushButton("停止", this);
    cleanButton = new QPushButton("重置", this);

    // 连接按钮的点击信号到槽函数
    connect(startButton, &QPushButton::clicked, this, &MainWindow::startTimer);
    connect(stopButton, &QPushButton::clicked, this, &MainWindow::stopTimer);
    connect(cleanButton, &QPushButton::clicked, this, &MainWindow::cleanTimer);
    // 创建一个定时器
    timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &MainWindow::updateTimer);

    // 设置布局
    QVBoxLayout *mainLayout = new QVBoxLayout; // 创建一个垂直布局
    mainLayout->addWidget(lcdNumber); //将QLCDNumber控件添加到布局中

    QHBoxLayout *buttonLayout = new QHBoxLayout; // 创建一个水平布局
    buttonLayout->addWidget(startButton);
    buttonLayout->addWidget(stopButton);
    buttonLayout->addWidget(cleanButton);

    mainLayout->addLayout(buttonLayout); // 将按钮布局添加到布局中


    // 创建一个中心窗口并设置布局
    QWidget *centralWidget = new QWidget(this);
    centralWidget->setLayout(mainLayout);
    this->setCentralWidget(centralWidget);//将中心窗口设置为主窗口

}

void MainWindow::updateTimer(){
    seconds++;
    lcdNumber->display(QString::number(seconds));
}

void MainWindow::startTimer(){
    //seconds = 0;
    lcdNumber->display(++seconds);
    timer->start(1000); // 每秒更新一次
}
void MainWindow::stopTimer(){
    timer->stop();
}

void MainWindow::cleanTimer(){
    seconds = 0;
    lcdNumber->display("00000");
}


MainWindow::~MainWindow()
{

}

Progress Bar:进度条

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //进度条初始化
    ui->progressBar->setValue(0);
    //设置进度条范围
    ui->progressBar->setRange(0, 100000);

    ui->pushButton->setText("开始");

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    for(int i=0;i<=100000;i++){
        for(int j=0;j<1;j++){
            ui->progressBar->setValue(i);
        }
    }
}


Status Bar:状态栏

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    void setupStatusBar();
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

#include <QPushButton>
#include <QLabel>
#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("状态栏示例");

    QPushButton *butt=new QPushButton("按钮",this);
    //设置按钮大小
    butt->setFixedSize(100,30);
    //设置按钮的位置
    this->setCentralWidget(butt);//设置中心窗口

    connect(butt, &QPushButton::clicked,
            this,
            [this]() {
        this->statusBar()->showMessage("按钮被点击了", 3000); // 显示消息3秒
    });

    setupStatusBar();//初始化状态栏
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::setupStatusBar(){
    QStatusBar *statusBar = new QStatusBar(this);//创建状态栏
    this ->setStatusBar(statusBar);//设置状态栏

    // 在状态栏中添加一个永久部件
    QLabel *permanentLabel = new QLabel("就绪", this);
    statusBar->addPermanentWidget(permanentLabel);

    // 初始显示消息
    statusBar->showMessage("欢迎使用状态栏", 5000); // 显示消息5秒
}

Horizontal Line : 水平线

Vertical Line : 垂直线

OpenGl Widget : OpenGL控件

QQuickWidget : Qt Quick控件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE 的相关知识点(一)

一、过滤器 过滤器&#xff08;Filter&#xff09;是一个用于对请求和响应进行预处理的组件。过滤器可以在 Java Servlet 规范中使用&#xff0c;通常用于执行一些通用的任务 1、过滤器的作用 过滤器是一种javaEE规范中定义的一种技术&#xff0c;可以让请求达到目标servlet之…

Open3D 格网法计算点云的占地面积

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2数据显示 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&#xff09;-CSDN博客 一、概…

林小茶 C语言程序设计 8.48.58.6答案

【8.4】用结构体表示日期&#xff0c;编写程序计算北京奥运会倒计时的天数并输出&#xff08;2008年8月8日北京奥运会开幕&#xff0c;输入的日期范围是2008年1月1日-2008年8月7日&#xff09;。 #include<stdio.h> struct Date{int year;int month;int day; }; int mai…

硬件电路仿真-LTspice官方软件使用-运放电路仿真实战

文章目录 一&#xff1a;LTspice简介1.1 推荐先简单运用1.2 课程配套资料1.3 仿真过程1.4 SPICE模型1.5 LTSPICE工具栏和快捷键1.6 LTSPICE数量级 二&#xff1a;基本功能&#xff08;探索功能如何使用&#xff09;2.1 瞬态分析(.tran)2.2 交流分析&#xff08;.ac&#xff09;…

基于Springboot3 +vue2的民宿酒店预订系统

这个一个大数据库课程设计&#xff0c;也是计算机软件课程设计大作业&#xff0c;Springboot vue民宿酒店预订系统 本系统是采用Springboot3 vue2的酒店预订系统 &#xff0c;数据库mysql ,用户权限分为系统管理员&#xff0c;客房操作人员、和 普通用户&#xff08;游客&…

如何在Python中使用情感分析API

情感分析 API 服务是一种借助人工智能技术的工具&#xff0c;能够自动识别并衡量文本数据&#xff08;像社交媒体的帖子、产品的评论、新闻文章等等&#xff09;所蕴含的情感色彩。在本文里&#xff0c;我们会一同探讨怎样在 Python 中集成情感分析 API &#xff0c;并且展示它…

【Python机器学习】利用SVD简化数据——示例:菜肴推荐引擎

现在&#xff0c;构建一个推荐引擎&#xff0c;该推荐引擎关注的是餐馆食物的推荐。假设一个人决定外出吃饭&#xff0c;但并不知道去哪吃什么&#xff0c;我们这个推荐系统就可以帮他做到这两点。 首先我们构建一个基本的推荐引擎&#xff0c;它能够寻找用户没有尝过的菜肴&a…

C++(11)类语法分析(2)

C(10)之类语法分析(2) Author: Once Day Date: 2024年8月17日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 …

有关缓存的一些面试知识

1、讲一讲Redis各种数据类型与底层实现 底层数据结构一共有 7 种&#xff0c;分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组、快速列表。它们和数据类型的对应关系如下图所示 String 类型的底层实现只有一种数据结构&#xff0c;也就是简单动态字符串。而…

57qi5rW35LqRZUhS pc.mob SQL注入漏洞复现

0x01 产品简介 57qi5rW35LqRZUhS是大中型企业广泛采用人力资源管理系统。某云是国内顶尖的HR软件供应商,是新一代eHR系统的领导者。 0x02 漏洞概述 57qi5rW35LqRZUhS pc.mob 接口存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例…

Linux-LVM创建和扩容

文章目录 1. 直接上手1.2 LVM 概念1.2.1 关键术语 1.3 LVM使用步骤1.3.1 创建物理卷&#xff08;PV&#xff09;1.3.2 创建卷组&#xff08;VG)1.3.3 创建逻辑卷&#xff08;LV&#xff09;1.3.4 格式化逻辑卷1.3.5 挂载逻辑卷1.3.6 扩展和缩小逻辑卷1.3.6.1 扩展逻辑卷1.3.6.2…

Science Robotics 受螳螂视觉启发的立体人工复眼技术及其边缘计算应用

在自然界中&#xff0c;生物体的独特生理结构和功能一直是人类技术创新的灵感源泉。节肢动物&#xff0c;尤其是昆虫类生物&#xff0c;高效的视觉系统吸引了众多研究者的关注。所有昆虫当中&#xff0c;螳螂因其独特的视觉机制&#xff08;左眼和右眼视野重叠形成的立体视觉&a…

网络编程项目篇

一、tftp客户端下载 1&#xff09;tftp协议概述 简单文件传输协议&#xff0c;适用于在网络上进行文件传输的一套标准协议&#xff0c;使用UDP传输 特点&#xff1a; 是应用层协议 基于UDP协议实现 数据传输模式 octet&#xff1a;二进制模式&#xff08;常用&#xff0…

【SpringBoot】SpringBoot中分页插件(PageHelper)的使用

目录 1.分页概念 2.原生写法 3.PageHelper插件分页查询 3.1 介绍 3.2 使用 3.3 Page对象和PageInf对象 1.分页概念 用户查询的数据不可能一次性全部展示给用户&#xff08;如果用户有一万条数据呢&#xff09;&#xff0c;而是分页展示给用户&#xff0c;这就是分页查询。…

Hospital Information System (HIS)

Hospital Information System &#xff08;HIS&#xff09; 医院门诊就诊流程

快速体验Ollama安装部署并支持AMD GPU推理加速

序言 Ollama 是一个专注于本地运行大型语言模型&#xff08;LLM&#xff09;的框架&#xff0c;它使得用户能够在自己的计算机上轻松地部署和使用大型语言模型&#xff0c;而无需依赖昂贵的GPU资源。Ollama 提供了一系列的工具和服务&#xff0c;旨在简化大型语言模型的安装、…

深入理解JVM运行时数据区(内存布局 )5大部分 | 异常讨论

前言&#xff1a; JVM运行时数据区&#xff08;内存布局&#xff09;是Java程序执行时用于存储各种数据的内存区域。这些区域在JVM启动时被创建&#xff0c;并在JVM关闭时销毁。它们的布局和管理方式对Java程序的性能和稳定性有着重要影响。 目录 一、由以下5大部分组成 1.…

【html+css 绚丽Loading】 - 000004 玄天旋轮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

STM32 编码器模式详解

编码器模式 stm32的定时器带的也有编码器模式。 所用的编码器是有ABZ三相&#xff0c;其中ab相是用来计数&#xff0c;z相输出零点信号。 AB相根据旋转的方向不同&#xff0c;输出的波形如下图所示&#xff1a; 从图上可以看出来&#xff0c;cw方向A相会超前B相90度左右&#…

egret 拖尾的实现 MotionStreak

背景&#xff1a;egret项目中需要用到拖尾效果&#xff0c;引擎原生没有提供&#xff0c;参考cocos2dx 的 MotionStreak实现拖尾效果。 原理 拖尾的原理很简单&#xff0c;定时记录节点的位置&#xff0c;根据运行的轨迹和指定的拖尾宽度生成拖尾网格&#xff0c;然后将纹理绘…