【Qt】Qt控件

发布于:2025-06-14 ⋅ 阅读:(20) ⋅ 点赞:(0)

Qt控件

Layout Spacer

垂直布局QVBoxLayout

    //修改窗口标准名称
    w.setWindowTitle("垂直布局");

    //设置窗口大小
    w.resize(400,300);

    //船舰QVBoxLayout布局,并且设置为父控件
    QVBoxLayout * mainlayout=new QVBoxLayout(&w);

    //船舰命令按钮控件添加到到QVBoxLayout布局
    mainlayout->addWidget(new QPushButton("命令按钮1"));
    mainlayout->addWidget(new QPushButton("命令按钮2"));
    mainlayout->addWidget(new QPushButton("命令按钮3"));

    //将QVBoxLayout设置为窗口的布局
    w.setLayout(mainlayout);

在这里插入图片描述

水平排列布局QHBoxLayout

    //修改窗口标准名称
    w.setWindowTitle("水平布局");

    //设置窗口大小
    w.resize(400,300);

    //创建水平布局实例
    QHBoxLayout * hlayout=new QHBoxLayout;

    //创建命令按钮控件添加到水平布局当中
    QPushButton *button1=new QPushButton("命令按钮1");
    QPushButton *button2=new QPushButton("命令按钮2");
    QPushButton *button3=new QPushButton("命令按钮3");

    hlayout->addWidget(button1);
    hlayout->addWidget(button2);
    hlayout->addWidget(button3);

    //创建一个容器控件,用来设置水平布局
    QWidget *container=new QWidget;
    container->setLayout(hlayout);

    //将容器控件添加到主容器的垂直布局当中
    QVBoxLayout *mainLayout=new QVBoxLayout;
    mainLayout->addWidget(container);
    
    //设置窗口布局
    w.setLayout(mainLayout);

在这里插入图片描述

网格布局 QGridLayout

头文件
在这里插入图片描述
源文件

    button1=new QPushButton(this);
    button1->setText("第一区:顶部菜单栏选项");
    button1->setFixedHeight(100);
    //让button1在水平和垂直方向上都尽可能扩展以占用更多的可用空间。
    button1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    button2=new QPushButton(this);
    button2->setText("第二区:侧边栏选项");
    button2->setFixedWidth(150);
    button2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    button3=new QPushButton(this);
    button3->setText("第三区:底部选项");
    button3->setFixedHeight(100);
    button3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    button4=new QPushButton(this);
    button4->setText("第四区:子窗体选项");
    button4->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    pGrid_layouts=new QGridLayout();

    //通过此函数设置左侧 顶部 右侧 底部边距,主要方便布局周边进行使用
    pGrid_layouts->setContentsMargins(0,0,0,0);

    //显示位置
    //addWidget(参数1,参数2,参数3,参数4,参数5,参数6)
    /*
     *1.我要插入的子布局对象
     *2.插入的开始行
     *3.插入的开始列
     *4.占用的行数
     *5.占用的列数
     *6.指定对其方式
     */
    pGrid_layouts->addWidget(button1,0,1);
    pGrid_layouts->addWidget(button2,0,0,3,1);
    pGrid_layouts->addWidget(button3,2,1);
    pGrid_layouts->addWidget(button4,1,1);

在这里插入图片描述

表格布局 QFormLayout

    setFixedSize(250,200);

    //创建表单布局指针
    QFormLayout *qLayout=new QFormLayout(this);

    QLineEdit *le1=new QLineEdit();
    QLineEdit *le2=new QLineEdit();
    QLineEdit *le3=new QLineEdit();

    qLayout->addRow("学号",le1);
    qLayout->addRow("姓名",le2);
    qLayout->addRow("学校",le3);

    //WarpAllRows将标签现实中在单行编辑框上面
    //qLayout->setRowWrapPolicy(QFormLayout::WrapAllRows);

    //当标签和单选编辑框,将标签显示在同一行
    qLayout->setLabelAlignment(Qt::AlignLeft);


    setWindowTitle("表单布局测试");

在这里插入图片描述

Button Contain

命令按钮Push Button

第一种写法:全部写在源文件

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

    this->setGeometry(300,150,500,300);

    //实例化两个命令按钮对象
    QPushButton * pb1=new QPushButton("命令按钮",this);
    QPushButton * pb2=new QPushButton("命令按钮",this);

    //设置两个QPushButton对象的坐标位置
    pb1->setGeometry(20,20,150,50);
    pb2->setGeometry(20,90,150,50);

    //与信号槽函数连接
    connect(pb1,&QPushButton::clicked,this,[=](){
        setStyleSheet("QMainWindow {background-color:rgba(255,255,0,100%)}");
    });

        connect(pb2,&QPushButton::clicked,this,[=](){
            setStyleSheet("QMainWindow {background-color:rgba(255,0,0,100%)}");
    });
}

在这里插入图片描述

第二种写法:在头文件定义,在源文件实现
头文件
在这里插入图片描述
源文件

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

    this->setGeometry(300,150,500,300);

    //实例化两个命令按钮对象
    pb1=new QPushButton("命令按钮",this);
    pb2=new QPushButton("命令按钮",this);

    //设置两个QPushButton对象的坐标位置
    pb1->setGeometry(20,20,150,50);
    pb2->setGeometry(20,90,150,50);

    //与信号槽函数连接
    connect(pb1,SIGNAL(clicked()),this,SLOT(pushbutton1_clicked()));
    connect(pb2,SIGNAL(clicked()),this,SLOT(pushbutton2_clicked()));
}
void MainWindow::pushbutton1_clicked(){
    setStyleSheet("QMainWindow {background-color:rgba(255,255,0,100%)}");
}
void MainWindow::pushbutton2_clicked(){
    setStyleSheet("QMainWindow {background-color:rgba(255,0,0,100%)}");
}

在这里插入图片描述

工具按钮Tool Button

头文件
在这里插入图片描述

源文件

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

    this->setGeometry(300,150,500,300);

    //实例化QToolBar对象
    tbar=new QToolBar(this);
    tbar->setGeometry(20,20,200,90);

    //设置QStyle类对象进行实例化,主要目的设置风格,图标时系统自带
    QStyle *sty=QApplication::style();   //获取当前应用程序的全局样式对象指针; QApplication::style() 返回应用程序默认的QStyle对象
    QIcon ico=sty->standardIcon(QStyle::SP_TitleBarContextHelpButton);
    
    //设置QToolButton对象进行实例化
    tbutton=new QToolButton();
    tbutton->setIcon(ico);
    tbutton->setText("系统帮助提示");

    //调用setToolButtonStyle函数设置tbutton样式,设置文本在图标下方
    tbutton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

    //将tubbton添加到tbar里面
    tbar->addWidget(tbutton);
}

在这里插入图片描述

单选按钮Radio Button

源文件

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

    this->setGeometry(300,150,500,300);

    QRadioButton * radb1= new QRadioButton(this);
    QRadioButton * radb2= new QRadioButton(this);

    radb1->setGeometry(20,20,150,40);
    radb2->setGeometry(20,80,150,40);

    radb1->setText("选择按钮1");
    radb2->setText("选择按钮2");

    //设置默认值Checked false true
    radb1->setChecked(true);
    radb2->setChecked(false);

}

在这里插入图片描述

复选框按钮Check Box

头文件
在这里插入图片描述
源文件

#include <QCheckBox>
#include <QRadioButton>

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

    this->setGeometry(400,300,500,300);

    cb= new QCheckBox(this);
    cb->setGeometry(30,50,250,50);
    cb->setCheckState(Qt::Checked);
    cb->setText("初始化状态:Check状态");

    cb->setTristate();//开启三态模式:选中,半选择,未选择

    connect(cb,SIGNAL(stateChanged(int)),this,SLOT(checkboxstate(int)));

}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::checkboxstate(int istate){
    switch(istate)
    {
    case Qt::Checked:
        cb->setText("选中状态");
        break;
    case Qt::Unchecked:
        cb->setText("未选中状态");
        break;
    case Qt::PartiallyChecked:
        cb->setText("半选中状态");
        break;

    default:
        break;
    }
}

在这里插入图片描述

命令链接按钮Command Link Button

头文件
在这里插入图片描述
源文件

#include <QDesktopServices>
#include <QUrl>

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

    this->setGeometry(400,300,500,300);

    clb=new QCommandLinkButton("testclb","clicked testclb",this);
    clb->setGeometry(50,100,250,60);

    connect(clb,SIGNAL(clicked()),this,SLOT(clbClicked()));
}

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


void MainWindow::clbClicked(){
    QDesktopServices::openUrl(QUrl("https://baidu.com"));
}

在这里插入图片描述

按钮盒Button Box

头文件
在这里插入图片描述

源文件

#include <QDebug>

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

    this->setGeometry(400,300,500,300);

    dbb=new QDialogButtonBox(this);
    dbb->setGeometry(100,100,200,30);

    //传统按钮创建方式
    dbb->addButton(QDialogButtonBox::Cancel);
    dbb->button(QDialogButtonBox::Cancel)->setText("取 消");

    //这里是自定义按钮,传统按钮只有ok,open,save,canncel...可以查帮助手册
    pb=new QPushButton("自定义");

    //将pb添加到dbb,并且设定ButtonRole为ActionRole
    dbb->addButton(pb,QDialogButtonBox::ActionRole);

    connect(dbb,SIGNAL(clicked(QAbstractButton *)),this, SLOT(dbbpbClicked(QAbstractButton*)));
}

void MainWindow::dbbpbClicked(QAbstractButton *bt){
    if(bt==dbb->button(QDialogButtonBox::Cancel)){
        qDebug()<<"您已经点击【取消】按钮"<<Qt::endl;
    }
    else if(bt==pb){
        qDebug()<<"您已经点击【自定义】按钮"<<Qt::endl;
    }
}

在这里插入图片描述

组合框Group Box

1.先把组合框实例化
2.创建按钮(单选/多选)
3.创建布局模式,并把按钮全部添加进布局模式当中addWidget()
4.把组合框的布局设置为刚刚创建的布局模式setLayout()

#include "widget.h"

#include <QDebug>
#include <QPushButton>
#include <QGroupBox>
#include <QRadioButton>
#include <QVBoxLayout>
#include <QCheckBox>
#include <QMenu>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //组合框1:gpb_1
    QGroupBox *gpb_1=new QGroupBox("单选按钮组1");
    QRadioButton *rbtn_1=new QRadioButton("RadioButton1");
    QRadioButton *rbtn_2=new QRadioButton("RadioButton2");
    QRadioButton *rbtn_3=new QRadioButton("RadioButton3");

    QVBoxLayout *vbly1=new QVBoxLayout;
    vbly1->addWidget(rbtn_1);
    vbly1->addWidget(rbtn_2);
    vbly1->addWidget(rbtn_3);
    gpb_1->setLayout(vbly1);

    //组合框2:gpb_2
    QGroupBox *gpb_2=new QGroupBox("复选按钮组2");
    QCheckBox *cbx1=new QCheckBox("checkbox1");
    QCheckBox *cbx2=new QCheckBox("checkbox2");
    QCheckBox *cbx3=new QCheckBox("checkbox3");

    //设置是否支持半选
    cbx2->setTristate(true);
    cbx2->setChecked(true);

    QVBoxLayout *vbly2=new QVBoxLayout;
    vbly2->addWidget(cbx1);
    vbly2->addWidget(cbx2);
    vbly2->addWidget(cbx3);
    gpb_2->setLayout(vbly2);

    //组合框3:gpb_3
    QGroupBox *gpb_3=new QGroupBox("单选按钮和复选按钮组3");
    gpb_3->setCheckable(true);
    QRadioButton  *rbtn_31=new QRadioButton("RadioButton31");
    QRadioButton  *rbtn_32=new QRadioButton("RadioButton32");
    QRadioButton  *rbtn_33=new QRadioButton("RadioButton33");
    QCheckBox *cbx4=new QCheckBox("checkbox4");

    QVBoxLayout *vbly3=new QVBoxLayout;
    vbly3->addWidget(rbtn_31);
    vbly3->addWidget(rbtn_32);
    vbly3->addWidget(rbtn_33);
    vbly3->addWidget(cbx4);
    gpb_3->setLayout(vbly3);

    //组合框4:gpb_4
    QGroupBox *gpb_4=new QGroupBox("综合按钮组4");
    gpb_4->setCheckable(true);
    gpb_4->setChecked(true);

    QPushButton *pbtn_4=new QPushButton("PushButton4");
    QPushButton *pbtn_5=new QPushButton("PushButton5");
    pbtn_5->setChecked(true);
    pbtn_5->setCheckable(true);

    QPushButton *pbtn_6=new QPushButton("PushButton6");

    //命令按钮添加子菜单
    QMenu *mu=new QMenu(this);
    mu->addAction("King");
    mu->addAction("Darren");
    mu->addAction("Mark");
    mu->addAction("Vico");
    pbtn_6->setMenu(mu);

    QVBoxLayout *vbly4=new QVBoxLayout;
    vbly4->addWidget(pbtn_4);
    vbly4->addWidget(pbtn_5);
    vbly4->addWidget(pbtn_6);
    gpb_4->setLayout(vbly4);

    QGridLayout *gdlyout=new QGridLayout;
    gdlyout->addWidget(gpb_1,0,0,1,1);
    gdlyout->addWidget(gpb_2,0,1,1,1);
    gdlyout->addWidget(gpb_3,1,0,1,1);
    gdlyout->addWidget(gpb_4,1,1,1,1);

    this->setLayout(gdlyout);
}

在这里插入图片描述

滚动区域Scroll Area

添加图片步骤:
1.把图片的文件夹复制到在项目目录下
2.在Qt中添加现有文件,选中图片文件夹
3.给文件夹加前缀,添加图片,保存

#include "widget.h"

#include <QApplication>
#include <QLabel>
#include <QScrollArea>
#include <QGridLayout>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;

    w.resize(300,200);

    /*
     * QScrollArea当中有很多功能继承来自于QAbstractScrollArea
     * 滚动条外观是否漂亮取决于当前滚动条策略
     */
    
    //创建Qlabel用于显示图片
    QLabel *qljpg=new QLabel;
    //允许图片缩放以适应QLabel
    qljpg->setScaledContents(true);
    
    //加载图片
    QImage imagejpg(":/images/2.png");
    if (imagejpg.isNull()) {
        qDebug() << "Failed to load image!";
    } else {
        qljpg->setPixmap(QPixmap::fromImage(imagejpg));
    }

    //创建滚动区域
    QScrollArea *sArea=new QScrollArea;
    //图片居中
    //sArea->setAlignment(Qt::AlignCenter);
    //根据窗口比例显示
    //sArea->setWidgetResizable(true);
    
    //设置水平滚动条始终显示。
    sArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    //设置垂直滚动条始终隐藏
    sArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    //把QLabel添加到滚动区域
    sArea->setWidget(qljpg);
    
    //创建布局并添加滚动区域
    QGridLayout *glayout=new QGridLayout;
    glayout->addWidget(sArea);

    w.setLayout(glayout);

    w.show();
    return a.exec();
}

在这里插入图片描述

标签小部件Tab Widget

头文件
在这里插入图片描述

源文件

#include "widget.h"

#include<QTabWidget>
#include<QGridLayout>
#include<QLabel>
#include<QPushButton>
#include<QLineEdit>
#include<QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->setWindowTitle("标签小部件控件测试");
    this->setGeometry(300,200,600,400);

    tabWidgetUI=new QTabWidget(this);
    tabWidgetUI->setGeometry(20,20,560,360);
    tabWidgetUI->show();

    bool m_showtabwidgetui1=true;
    bool m_showtabwidgetui2=true;

    if(m_showtabwidgetui1)
    {
        QWidget *qwidget1=new QWidget();
        tabWidgetUI->addTab(qwidget1,"进程");

        QGridLayout *glayout=new QGridLayout();
        QLabel *lab1=new QLabel("请选择文件及文件夹:");
        QLineEdit *ledit1=new QLineEdit();

        QPushButton *pbt1=new QPushButton("消息框...");
        connect(pbt1,SIGNAL(clicked(bool)),this,SLOT(MsgCommit()));

        glayout->addWidget(lab1,0,0);
        glayout->addWidget(ledit1,0,1);
        glayout->addWidget(pbt1,0,2);

        qwidget1->setLayout(glayout);
    }
    if(m_showtabwidgetui2)
    {
        QWidget *qwidget2=new QWidget();
        tabWidgetUI->addTab(qwidget2,"性能");
    }

}

void Widget::MsgCommit(){
    QMessageBox::information(NULL,"testing","QMessageBox:命令按钮测试成功!",QMessageBox::Ok);
}

在这里插入图片描述

框架Frame

在ui界面中,设置两个frame_1和frame_2,设置为网格布局
在这里插入图片描述

源文件

#include <QFrame>

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

    setWindowTitle("Frame框架控件测试");
    ui->frame_1->setStyleSheet("background-color:yellow");
    ui->frame_2->setStyleSheet("background-color:green");

    ui->frame_1->setLineWidth(1);
    ui->frame_1->setMidLineWidth(1);
    ui->frame_1->setFrameShape(QFrame::Box);
    ui->frame_1->setFrameShadow(QFrame::Raised);

    ui->frame_2->setLineWidth(0);
    ui->frame_2->setMidLineWidth(1);
    ui->frame_2->setFrameShape(QFrame::Box);
    ui->frame_2->setFrameShadow(QFrame::Sunken);
}

停靠窗体部件Dock Widget

源文件

#include <QDockWidget>
#include<QLabel>
#include<QComboBox>
#include <QPushButton>
#include <QGridLayout>

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

    QDockWidget *dw=new QDockWidget("停靠窗口部件测试",this);

    QLabel *lab=new QLabel("学历层次");
    QComboBox *cbx= new QComboBox();
    cbx->addItem("小学");
    cbx->addItem("初中");
    cbx->addItem("高中");
    cbx->addItem("大学");

    QPushButton *pbt1=new QPushButton("清华大学");
    QPushButton *pbt2=new QPushButton("北京大学");

    QGridLayout *glayout=new QGridLayout();
    glayout->addWidget(lab,0,0,1,1);
    glayout->addWidget(cbx,0,1,1,1);
    glayout->addWidget(pbt1,1,0,1,1);
    glayout->addWidget(pbt2,1,1,1,1);

    glayout->setHorizontalSpacing(10);
    glayout->setVerticalSpacing(10);
    glayout->setContentsMargins(20,20,20,20);

    QWidget *wgt=new QWidget();
    wgt->setLayout(glayout);
    dw->setWidget(wgt);

    dw->setMaximumSize(300,300);
}

在这里插入图片描述

视图Items Views

清单视图List View

头文件
在这里插入图片描述
源文件

#include <QListView>
#include <QStringListModel>
#include <QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    resize(450,250);

    listview1=new QListView(this);
    listview1->setGeometry(20,20,240,160);

    //初始化数据列表
    QStringList qlist;
    qlist.append("运动类:篮球、足球");
    qlist.append("娱乐类:看电影、写小说、听音乐");
    qlist.append("游戏类:五子棋、扑克牌、中国象棋");
    qlist.append("旅游类:国外旅游、国内旅游");

    //创建一个 QStringListModel 对象 listmode,用于管理 qlist 中的数据。
    QStringListModel *listmode=new QStringListModel(qlist);

    //将 listmode 设置为 listview1 的数据模型,以便在 QListView 中显示这些数据。
    listview1->setModel(listmode);

    connect(listview1,SIGNAL(clicked(const QModelIndex)),this,SLOT(SlotClickedFunc(const QModelIndex)));
}

Widget::~Widget() {

}
void Widget::SlotClickedFunc(const QModelIndex &index){
    QMessageBox::information(NULL,"兴趣爱好","你选择的类型为:\n"+index.data().toString());
}

在这里插入图片描述

树视图Tree View

在ui中,添加TreeView视图
在这里插入图片描述

头文件
在这里插入图片描述

源文件

#include <QStandardItem>

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

    InitTreeViewFunc();
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::InitTreeViewFunc()
{
    //1.构造model
    sItemMode=new QStandardItemModel(ui->treeView);
    //等价于
    //sItemMode = new QStandardItemModel();  // 1. 创建模型对象
ui->treeView->setModel(sItemMode);     // 2. 将模型设置给视图

    //
    sItemMode->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("编号")<<QStringLiteral("初中部|高中部"));

    QList<QStandardItem*> item11;

    QStandardItem *item1=new QStandardItem(QString::number(1));
    QStandardItem *item2=new QStandardItem("初中部");

    //创建一级节点,将它加入到sItemModel
    item11.append(item1);
    item11.append(item2);
    sItemMode->appendRow(item11);

    //二级节点,添加到第一个一级节点
    QList<QStandardItem*> item112;
    QStandardItem *item1121=new QStandardItem(QString::number(2));
    QStandardItem *item1122=new QStandardItem(QStringLiteral("一年级"));

    item112.append(item1121);
    item112.append(item1122);
    item1->appendRow(item112);

    //三级节点,添加到第一个二级节点
    QList<QStandardItem*> item1231;
    QStandardItem *item12311=new QStandardItem(QString::number(3));
    QStandardItem *item12312=new QStandardItem(QStringLiteral("一班"));
    item1231.append(item12311);
    item1231.append(item12312);
    item1121->appendRow(item1231);

    QList<QStandardItem*> item1232;
    QStandardItem *item12321=new QStandardItem(QString::number(3));
    QStandardItem *item12322=new QStandardItem(QStringLiteral("二班"));
    item1232.append(item12321);
    item1232.append(item12322);
    item1121->appendRow(item1232);

    QList<QStandardItem*> item21;

    QStandardItem *item3=new QStandardItem(QString::number(1));
    QStandardItem *item4=new QStandardItem("高中部");

    //创建一级节点,将它加入到sItemModel
    item21.append(item3);
    item21.append(item4);
    sItemMode->appendRow(item21);

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

在这里插入图片描述

表视图Table View

在ui 界面中,添加table view控件
头文件
在这里插入图片描述
源文件

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

    InitTableViewFunc();
}

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

void MainWindow::InitTableViewFunc()
{
    QStandardItemModel *stuMode=new QStandardItemModel();
    stuMode->setHorizontalHeaderItem(0,new QStandardItem(QObject::tr("学号")));
    stuMode->setHorizontalHeaderItem(1,new QStandardItem(QObject::tr("姓名")));
    stuMode->setHorizontalHeaderItem(2,new QStandardItem(QObject::tr("性别")));
    stuMode->setHorizontalHeaderItem(3,new QStandardItem(QObject::tr("分数")));

    //通过API函数将数据模型绑定到QTableView
    ui->tableView->setModel(stuMode);

    //设置表格列的宽度
    ui->tableView->setColumnWidth(0,120);

    //2.添加数据信息
    stuMode->setItem(0,0,new QStandardItem("2022001"));
    stuMode->setItem(0,1,new QStandardItem("张三"));
    stuMode->setItem(0,2,new QStandardItem("男"));
    stuMode->setItem(0,3,new QStandardItem("714"));

    stuMode->setItem(1,0,new QStandardItem("2022002"));
    stuMode->setItem(1,1,new QStandardItem("小花"));
    stuMode->setItem(1,2,new QStandardItem("女"));
    stuMode->setItem(1,3,new QStandardItem("754"));

    stuMode->setItem(2,0,new QStandardItem("2022003"));
    stuMode->setItem(2,1,new QStandardItem("李三"));
    stuMode->setItem(2,2,new QStandardItem("男"));
    stuMode->setItem(2,3,new QStandardItem("765"));
}

在这里插入图片描述

ListWidget

在ui文件创建listWidget
源文件

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

    QListWidgetItem *qitem=new QListWidgetItem("沁园春-雪");
    ui->listWidget->addItem(qitem);
    qitem->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);

    QStringList slist;
    slist<<"1:北国风光,千里冰封,万里雪飘";
    slist<<"2:望长城内外...";

    ui->listWidget->addItems(slist);

}

在这里插入图片描述

TreeWidget

源文件

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

    //添加第一级节点
    QTreeWidgetItem*topItem1=new QTreeWidgetItem(ui->treeWidget);
    topItem1->setText(0,"清华大学");
    ui->treeWidget->addTopLevelItem(topItem1);

    //隐藏表头
    ui->treeWidget->setHeaderHidden(true);
    //展开节点
    ui->treeWidget->expandAll();

    //二级节点添加到一级节点的topItem1
    QTreeWidgetItem *item11=new QTreeWidgetItem(topItem1);
    item11->setText(0,"清华大学建筑学院");
    item11->setCheckState(0,Qt::Checked);

    QTreeWidgetItem *item12=new QTreeWidgetItem(topItem1);
    item12->setText(0,"清华大学土木学院");
    item12->setCheckState(0,Qt::Checked);

    QTreeWidgetItem*topItem2=new QTreeWidgetItem(ui->treeWidget);
    topItem2->setText(0,"北京大学");
    ui->treeWidget->addTopLevelItem(topItem2);


    ui->treeWidget->setHeaderHidden(true);
    ui->treeWidget->expandAll();

    QTreeWidgetItem *item21=new QTreeWidgetItem(topItem2);
    item21->setText(0,"北京大学文学院");
    item21->setCheckState(0,Qt::Checked);
}

yuan

TabelWidget

源文件

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

    ui->tableWidget->setRowCount(3);
    ui->tableWidget->setColumnCount(2);

    QStringList slist;
    slist<<"学号"<<"高考分数";
    ui->tableWidget->setHorizontalHeaderLabels(slist);

    QList<QString> strno;
    strno<<"202201"<<"202202"<<"202203";
    QList<QString> strscore;
    strscore<<"708"<<"712"<<"690";

    for(int i=0;i<3;i++){
        int iCol=0;
        QTableWidgetItem *pitem = new QTableWidgetItem(strno.at(i));
        ui->tableWidget->setItem(i,iCol++,pitem);
        ui->tableWidget->setItem(i,iCol,new QTableWidgetItem(strscore.at(i)));
    }

}

在这里插入图片描述

Input Widget

Combo Box

头文件
在这里插入图片描述

源文件

#include <QMessageBox>
#include <QDebug>

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

    //设置主空格的显示位置及大小
    this->setGeometry(300,200,1000,600);

    combobox=new QComboBox(this);
    combobox->setGeometry(10,10,200,30);
    combobox->addItem("北京市");
    combobox->addItem("上海市");
    combobox->addItem("广东省");

    connect(combobox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboboxIndex(int)));

}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::comboboxIndex(int index){
    qDebug()<<"你选择的区域是:"<<combobox->itemText(index)<<Qt::endl;
    QMessageBox mybox(QMessageBox::Question,"信息",combobox->itemText(index),QMessageBox::Yes|QMessageBox::No);
    mybox.exec();
}

在这里插入图片描述

Font Combo Box

源文件

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

    fontcombobox=new QFontComboBox(this);
    qlabels=new QLabel(this);
    fontcombobox->setGeometry(10,50,200,30);
    qlabels->setGeometry(10,70,300,50);

    connect(fontcombobox,SIGNAL(currentFontChanged(QFont)),this,SLOT(fontComboboxFunc(QFont)));
}

void MainWindow::fontComboboxFunc(QFont font){
    qlabels->setFont(font);
    QString qStr="广东省广州市";
    qlabels->setText(qStr);
}

在这里插入图片描述

头文件
在这里插入图片描述

Line Edit

头文件
在这里插入图片描述
源文件

#include <QMessageBox>
#include <QDebug>

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

    lineedit=new QLineEdit(this);
    lineedit->setGeometry(10,150,200,30);
    pushbutton=new QPushButton(this);
    pushbutton->setText("点击我");
    qlabely=new QLabel(this);
    qlabely->setGeometry(10,200,400,30);
    qlabely->setText("你输入的内容为:");

    connect(pushbutton,SIGNAL(clicked()),this,SLOT(pushbuttonclicked()));
}

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


void MainWindow::pushbuttonclicked(){
    QString qStr;
    qStr="您输入的内容为:";
    qStr=qStr+lineedit->text();

    qlabely->setText(qStr);
    lineedit->clear();
}

在这里插入图片描述

文本编辑框 Text Edit

头文件
在这里插入图片描述

源文件

#include <QDir>
#include <QTextStream>
#include <QCoreApplication>

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

    plaintedit=new QPlainTextEdit(this);
    plaintedit->setGeometry(10,250,400,200);
    radiobutton=new QRadioButton(this);
    radiobutton->setGeometry(260,220,200,30);
    radiobutton->setText("只读模式");

    QDir::setCurrent(QCoreApplication::applicationDirPath());
    QFile fe("moc_mainwindow.cpp");
    fe.open(QFile::ReadOnly|QFile::Text);

    //加载到文件流
    QTextStream strin(&fe);
    plaintedit->insertPlainText(strin.readAll());

    connect(radiobutton,SIGNAL(clicked()),this,SLOT(radioButtonClicked()));
}

void MainWindow::radioButtonClicked()
{
    if(radiobutton->isChecked()){
        plaintedit->setReadOnly(true);
    }else{
        plaintedit->setReadOnly(false);
    }
}

在这里插入图片描述

Spin Box

头文件
在这里插入图片描述
源文件

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

    //改变窗口背景颜色
    this->setStyleSheet("QMainWindow{background-color:""rgba(250,220,120,100%))}");

    spinbox=new QSpinBox(this);
    spinbox->setGeometry(440,250,150,30);

    spinbox->setRange(0,100);
    spinbox->setSingleStep(10);
    spinbox->setValue(100);
    spinbox->setSuffix("%不透明度");

    connect(spinbox,SIGNAL(valueChanged(int)),this,SLOT(spinboxValueChanged(int)));
}

void MainWindow::spinboxValueChanged(int x)
{
    double dx=(double)x/100;

    this->setWindowOpacity(dx);
}

在这里插入图片描述

Date/Time Edit

头文件

在这里插入图片描述

源文件


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

    dte=new QDateTimeEdit(QDateTime::currentDateTime(),this);
    dte->setGeometry(440,290,220,30);
    te=new QTimeEdit(QTime::currentTime(),this);
    te->setGeometry(440,330,200,30);
    de=new QDateEdit(QDate::currentDate(),this);
    de->setGeometry(440,370,200,30);
}

在这里插入图片描述

Progress Bar

头文件

在这里插入图片描述

源文件


    hscrollbar=new QScrollBar(Qt::Horizontal,this);
    hscrollbar->setGeometry(0,500,1000,30);
    vscrollbar=new QScrollBar(Qt::Vertical,this);
    vscrollbar->setGeometry(570,0,30,500);

在这里插入图片描述

Key Sequence Edit

头文件

在这里插入图片描述

源文件

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

    kse=new QKeySequenceEdit(this);
    kse->setGeometry(200,230,200,30);

    connect(kse,SIGNAL(keySequenceChanged(const QKeySequence &)),this,
            SLOT(keyseqeditChanged(const QKeySequence &)));


}

void MainWindow::keyseqeditChanged(const QKeySequence &key){
    if(key==QKeySequence(tr("Ctrl+Q")))
        this->close();
    else
        qDebug()<<key.toString()<<Qt::endl;
}

在这里插入图片描述

Display Widgets

Label

在ui中添加Label,更名为labeljpg
头文件
在这里插入图片描述

源文件

#include <QMessageBox>
#include <QImage>

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

    textlabelFunc();
}

void Widget::textlabelFunc(){
    QString fName("C:\\Users\\Gemini\\Desktop\\1.jpg");
    QImage *qimg=new QImage;

    if(!(qimg->load(fName)))
    {
        QMessageBox::information(this,"失败","加载jpg图片失败,请重新检查");
        delete qimg;

        return;
    }
    ui->labeljpg->setPixmap(QPixmap::fromImage(*qimg));
}

Text Browser

在ui界面中添加textBrowser
头文件
在这里插入图片描述
源文件

#include <QFile>
#include <QString>

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

    textbrowserFuncReadTxt();
}

void Widget::textbrowserFuncReadTxt(){
    QString qStrdData;
    QFile qfile("C:\\Users\\Gemini\\Desktop\\1.txt");
    if(!(qfile.open(QIODevice::ReadOnly|QIODevice::Text)))
    {
        QMessageBox::warning(this,"失败","打开文件失败,请重新检查");
    }
    while(!qfile.atEnd()){
        QByteArray ay=qfile.readLine();
        QString strs(ay);
        qStrdData.append(strs);
    }
    ui->textBrowser->setText(qStrdData);
}

Progress Bar

在ui中添加progress Bar进度条按钮,并且可以右键按钮提升为槽。这是系统会自动创建隐性的信号与槽机制,不需要再写connect()
在这里插入图片描述

头文件
在这里插入图片描述
源文件


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    
    ui->progressBar->setRange(0,1000000);
    ui->progressBar->setValue(0);
}

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

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

在这里插入图片描述

LCD N

在ui界面中添加LCD Number和三个按钮,命名如下。并把三个按钮都右键添加槽函数
在这里插入图片描述
头文件在这里插入图片描述

源文件

#include <QTimer>

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

    InitFunc();
    connect(timers,&QTimer::timeout,this,&Widget::on_timerout);
}

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


void Widget::on_pushbtnstart_clicked()
{
    timers->start();
    ui->pushbtnstart->setEnabled(false);
    ui->pushbtnpause->setEnabled(true);
    ui->pushbtnreset->setEnabled(true);
}


void Widget::on_pushbtnpause_clicked()
{
    timers->stop();
    ui->pushbtnstart->setEnabled(true);
    ui->pushbtnpause->setEnabled(false);
    ui->pushbtnreset->setEnabled(true);
}


void Widget::on_pushbtnreset_clicked()
{
    timers->stop();
    iValues=0;
    ui->pushbtn->display(iValues);
    ui->pushbtnstart->setEnabled(true);
    ui->pushbtnpause->setEnabled(true);
    ui->pushbtnreset->setEnabled(false);
}

void Widget::InitFunc(){
    timers=new QTimer(this);
    timers->setInterval(1000);//定时周期为1s
    timers->stop();
}
void Widget::on_timerout(){
    iValues++;
    ui->pushbtn->display(iValues);
}

在这里插入图片描述