玩QT学习

用于浏览C/C++代码,韦东山老师习惯使用的工具

Source Insight

(1)设置主题

可以将主题设置为浅色或者深色,比如在晚上的时候,可以将主题调成深色主题,就像手机的白天模式和夜间模式一样

设置方法:【工具】->【选项】->【环境】

设置主题

(2)设置中英文

【工具】->【选项】->【环境】

设置中英文

(3)设置代码区字体大小

【工具】->【选项】->【文本编辑器】->【Fonts & Colors】

设置代码区字体大小
还可以设置鼠标滚轮,来放大和缩小字体

方法:【工具】->【选项】->【文本编辑器】->【Behavior】

很实用和方便的功能,尤其是你在给同事讲解代码时,可以方便地放大代码区域

鼠标滚轮,缩放字体

(4)显示行号、高亮显示当前行

方法:【工具】->【选项】->【文本编辑器】->【Display】

显示行号:方便代码行数的定位

高亮显示当前行:方便快速定位当前光标所在的行。这个默认时未勾选的,建议勾选

显示文件编码:界面上直观地显示文件编码。这个默认时未勾选的,建议勾选,这样文件编码显示在打开文件的右上角。

显示行号、高亮显示当前行

(5)设置文件默认编码

文件的默认编码为 utf-8,建议保持默认,这样中文不会乱码

如果是GB2312或者GBK编码的文件, 使用utf-8编码来打开就会乱码

方法:【工具】->【选项】->【文本编辑器】->【Behavior】

设置文件默认编码

(6)保存时清理

就是在保存文件时,清除多余的空白字符,使代码简洁,并且占用的文件大小也会缩小

在 VS Code 以及 Source Insight 中都有这种设置

方法:【工具】->【选项】->【文本编辑器】->【Behavior】
以上内容参考

https://www.bilibili.com/read/cv17031962?spm_id_from=333.999.0.0

新建工程

main.cpp

#include "mymainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    // 1. QApplication 是 Qt 框架提供的应用程序类
    // 作用:负责 Qt 中事件的处理,比如鼠标的单击事件,键盘的输入事件等
    QApplication a(argc, argv);

    // 2. 创建自己的窗口对象,并调用其 show 方法,将窗口显示出来
    MyMainWindow w;
    w.show();
    // 3. 调用 QApplication 类的 exec 方法,应用程序就阻塞在这里,并不会退出,而是进入到事件循环的处理, 直到退出程序(比如点击了窗体右上角的关闭按钮)
    return a.exec();
}

如何使用标准信号和槽

第一步:先添加4个按键和两弹簧,两弹簧的作用是为了居中显示
第二步:修改按键名称
第三步:在mymainwindow.cpp文件下面写上这几句代码

#include "mymainwindow.h"
#include "ui_mymainwindow.h"

MyMainWindow::MyMainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MyMainWindow)
{
    ui->setupUi(this);
    //文本改变
    //ui->btn_start->setText("开始");
    //ui->btn_stop->setText("停止");
    //ctrl + alt + 键盘下键可以复制代码
    connect(ui->btnMax, SIGNAL(clicked()), this, SLOT(showMaximized()));
    connect(ui->btnNolmal, SIGNAL(clicked()), this, SLOT(showNormal()));
    connect(ui->btnMin, SIGNAL(clicked()), this, SLOT(showMinimized()));
    connect(ui->btnClose, SIGNAL(clicked()), this, SLOT(close()));
}

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

工程在class_start文件夹里面

自定义槽和信号

定义了一个长官类和士兵类

长官类的头文件

#ifndef COMMANDER_H
#define COMMANDER_H

#include <QObject>

// 1.自定义的类,需要继承自 QObject 类
class Commander : public QObject
{
    // 2.并且添加 Q_OBJECT 宏,才能正常使用 Qt 的信号和槽机制
    Q_OBJECT
public:
    explicit Commander(QObject *parent = 0);
// 3.在 signals 后面添加自定义的信号即可
    // 1.信号只需声明,无需实现
    // 2.信号返回值为 void
signals:
    void go();
    void go(QString str);
public slots:
};

#endif // COMMANDER_H

长官类的cpp

#include "commander.h"

Commander::Commander(QObject *parent) : QObject(parent)
{
}

士兵类的头文件

#ifndef SOLDIER_H
#define SOLDIER_H

#include <QObject>
#include <QDebug>

class soldier : public QObject
{
    Q_OBJECT
public:
    explicit soldier(QObject *parent = 0);

signals:
    // 1.通常将槽函数添加到 slots 后面
    // 这个 slots 也可以不写。不过建议写上,以指明这是一个槽函数
    // pulic,表示槽函数既可以在当前类及其子类的成员函数中调用,也可以在类外部的其它函数(比如 main() 函数)中调用
public slots:
    // 2.槽函数的返回值和参数,要和信号保持一致
    // 由于信号无返回值,因此槽函数也无返回值
    // 由于信号无参数,因此槽函数也无参数
    //快捷键:alt+回车键
    void fight();
    void fight(QString str);
};

#endif // SOLDIER_H

士兵类的CPP文件

#include "soldier.h"
#include <QDebug>
soldier::soldier(QObject *parent) : QObject(parent)
{

}

void soldier::fight()
{
    qDebug() << "fight";
}

void soldier::fight(QString str)
{
    qDebug() << str;
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "commander.h"
#include "soldier.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //1.实例化对象
    Commander commander;
    soldier soldier1;
    //2.建立信号和槽的连接
    connect(&commander, SIGNAL(go()), &soldier1, SLOT(fight()));
    connect(&commander, SIGNAL(go(QString)), &soldier1, SLOT(fight(QString)));
    //3.发送信号
    //commander.go();
    //另外一种写法
    //emit commander.go();
    emit commander.go("come back");
}

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

信号和槽的⑤种连接方式

什么是lambda表达式

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

    // 演示lambda表达式

    // 3.1 匿名函数的定义
#if 0
    []() {
        qDebug() << "lambda...";
    };
#endif

    // 3.2 匿名函数的调用
#if 0
    []() {
        qDebug() << "lambda...";
    }();
#endif

    int a =10;

    // 3.3 不捕获任何变量
    // Variable 'a' cannot be implicitly captured in a lambda with no capture-default specified
#if 0
    []() {
        qDebug() << a;
    }();
#endif

    // 3.4 按引用捕获
#if 0
    [&]() {
        qDebug() << a++;    // 10
    }();
    qDebug() << a;          // 11
#endif

    // 3.5 按值捕获
    // 按值捕获的变量,在 lambda 表达式内是只读的,不能修改赋值
#if 0
    [=]() {
        // Cannot assign to a variable captured by copy in a non-mutable lambda
        qDebug() << a++;
    }();
#endif

    // 3.6 按值捕获 + mutalbe 选项
    // 添加 mutable 选项,就可以在 lambda 内修改捕获的变量了
    // 并且=这种方式,是按值传递的,里面的修改,不会影响外边。
#if 0
    [=]() mutable {
        qDebug() << a++;    // 10
    }();
    qDebug() << a;          // 10
#endif

    // 3.7 参数
    // 添加 mutable 选项,就可以在 lambda 内修改捕获的变量了
    // 并且=这种方式,是按值传递的,里面的修改,不会影响外边。
#if 0
    [](int x, int y) {
        qDebug() << x + y;    // 3
    }(1, 2);
#endif

    // 3.8 返回值
    // 返回值可以省略,编译器会自动推断 lambda 表达式的返回值类型
    // 返回值省略时,也可以连同符号`->`一起省略
#if 0
    int sum = [](int x, int y) -> int {
        return x + y;
    }(1, 2);
    qDebug() << sum;    // 3
#endif

#if 1
    int sum = [](int x, int y) {
        return x + y;
    }(1, 2);
    qDebug() << sum;    // 3
#endif
} 

信号与槽的五种连接方式代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //clicked()和showMaximized()是QT提供的函数
    connect(ui->btnMax, SIGNAL(clicked()), this, SLOT(showMaximized()));

     // 2.使用函数地址的方式连接信号和槽  //强烈推荐
    connect(ui->btnNormal, &QPushButton::clicked, this, &QMainWindow::showNormal);

    // 5. 使用lambda 表达式做槽函数
    connect(ui->btnSetWindowTitle, &QPushButton::clicked, this, [this]() {
        this->setWindowTitle("嘻嘻哈哈");
    });
}
MainWindow::~MainWindow()
{
    delete ui;
}
//第三种方式:信号到槽
void MainWindow::on_btnMini_clicked()
{
    this->showMinimized();
}

文件在class_four里面

信号与槽的拓展

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "commander.h"
#include "soldier.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //如何连接重载的信号和槽
    Commander commander;
    Soldier soldier;
    Soldier soldier1;
    Soldier soldier2;
    void (Commander::*pGo)() = &Commander::go;
    void (Soldier::*pFight)() = &Soldier::fight;
    connect(&commander, pGo, &soldier, pFight);

    //要记得新定义两个指针
    void (Commander::*pGoForFreedom)(QString) = &Commander::go;
    void (Soldier::*pFightForFreedom)(QString) = &Soldier::fight;
    connect(&commander, pGoForFreedom, &soldier, pFightForFreedom);

    //emit commander.go();
    //emit commander.go("freedom");

    //一个信号连接多个槽
#if 0
    //connect(&commander, pGo, &soldier1, pFight);
    void (Soldier::*pEscape)() = &Soldier::escape;
    connect(&commander, pGo, &soldier1, pEscape);
    //emit commander.go();
#endif

#if 0
    //信号连接信号
    Commander *commander2;
    Soldier *soldier3;

    commander2 = new Commander();
    soldier3 = new Soldier();
    connect(ui->btnAction, &QPushButton::clicked, commander2, &Commander::move);
    connect(commander2, &Commander::move, soldier3, &Soldier::escape);
#endif

   //断开连接
    emit commander.go();
    commander.disconnect();
    emit commander.go("freedom");
}

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

工程在class_five里面

widget的使用

#include "widget.h"
#include "ui_widget.h"
#include "subwidget.h"
#include "ui_subwidget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
#if 0
     // 未指定父窗口,那么这个窗口就是独立的窗口
     // 需要调用其show方法来显示
     SubWidget* subWidget = new SubWidget();
     subWidget->setWindowTitle("SubWidget");
     subWidget->show();
#endif

#if 0
     // 如果指定了父窗口,那么就不用调用其show方法了
     // 因为:父窗口显示时,会将其子窗口一起显示出来。
     SubWidget* subWidget = new SubWidget(this);
     subWidget->setWindowTitle("SubWidget");
     //subWidget->show();
 #endif
}

Widget::~Widget()
{
    delete ui;
}
//获取窗口位置和大小
void Widget::on_pushButton_2_clicked()
{
    qDebug() << "---------------------------------";
    QRect rect = this->geometry();
    qDebug() << "左上角: " << rect.topLeft();
    qDebug() << "右上角: " << rect.topRight();
    qDebug() << "左下角: " << rect.bottomLeft();
    qDebug() << "右下角: " << rect.bottomRight();
    qDebug() << "宽度: " << rect.width();
    qDebug() << "高度: " << rect.height();
}
//设置窗口大小为400*400
void Widget::on_pushButton_8_clicked()
{
    this->resize(400, 400);
}
//设置固定大小为500*500
void Widget::on_pushButton_clicked()
{
    this->setFixedSize(500, 500);
}
//设置最小大小为300*300
void Widget::on_pushButton_4_clicked()
{
    this->setMinimumSize(300, 300);
}
//设置最大大小为600*600
void Widget::on_pushButton_6_clicked()
{
    this->setMaximumSize(600, 600);
}
//移动窗口到(100,100)
void Widget::on_pushButton_3_clicked()
{
    this->move(100, 100);
}
//设置窗口标题
void Widget::on_pushButton_7_clicked()
{
     this->setWindowTitle("演示QWidget");
}
//设置窗口图标
void Widget::on_pushButton_5_clicked()
{
    this->setWindowIcon(QIcon(":/png/储能.png"));
}

工程在class_six里面

QpushButton

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

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

void Widget::on_btnStart_clicked()
{
    qDebug() << "xixi";
    QString s = ui->btnStart->text();

    if(s == "启动") {
        // 设置文本和字体
        ui->btnStart->setText("停止");
        ui->btnStart->setFont(QFont("黑体", 16));

        // 设置图标和图标大小
        ui->btnStart->setIcon(QIcon(":/png/播放.png"));
        ui->btnStart->setIconSize(QSize(48, 48));
    } else {
        ui->btnStart->setText("启动");
        ui->btnStart->setFont(QFont("黑体", 12));

        ui->btnStart->setIcon(QIcon(":/png/暂停 .png"));
        ui->btnStart->setIconSize(QSize(32, 32));
    }
}

void Widget::on_pushButton_2_clicked()
{
    qDebug() << "xixi2";
    QString s = ui->pushButton_2->text();
    if(s == "连接服务器") {
        ui->pushButton_2->setText("断开连接");
        ui->pushButton_5->setEnabled(true);
    } else {
        ui->pushButton_2->setText("连接服务器");
        ui->pushButton_5->setEnabled(false);
    }
}

void Widget::on_pushButton_4_clicked()
{
    qDebug() << "on_pushButton_4_clicked";
}

void Widget::on_pushButton_4_pressed()
{
    qDebug() << "on_pushButton_4_pressed";
}

工程在class_seven里面

标签 QLabe

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QMessageBox>
#include <QPixmap>
#include <Qtime>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

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

void Widget::on_btnGetText_clicked()
{
    QMessageBox::information(this, "标签演示", ui->lbTime1->text());
}

void Widget::on_btnSetText_clicked()
{
    ui->lbTime1->setText(QTime::currentTime().toString());
}

void Widget::on_btnAlignLeft_clicked()
{
    ui->lbAlignLeft->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
}

void Widget::on_btnAlignCenter_clicked()
{
    ui->lbAlignLeft->setAlignment(Qt::AlignCenter);
}

void Widget::on_btnAlignRight_clicked()
{
    ui->lbAlignLeft->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
}

void Widget::on_pushButton_6_clicked()
{
    ui->lbwrap->setWordWrap(false);
}

void Widget::on_pushButton_7_clicked()
{

}

void Widget::on_btnEnable_clicked()
{
    ui->lbwrap->setWordWrap(true);
}

int index = 0;
void Widget::on_btnToggleImage_clicked()
{
    QPixmap px;

       // 将图标文件加载到 QPixmap
       if(index == 0) {
           px.load(QString(":/png/播放.png"));
           index++;
       } else {
           px.load(QString(":/png/暂停 .png"));
           index = 0;
       }

       // 把图片设置到标签上
       ui->lbImage->setPixmap(px);

       // 不要缩放,否则拉伸导致失真
       ui->lbImage->setScaledContents(false);

       // 图片在标签中居中显示(水平和垂直方向均居中)
       ui->lbImage->setAlignment(Qt::AlignCenter);
}

工程在class_eight里面

QLineEDIT文本框

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <qvalidator.h>
#include <QMessageBox>
#include <QTime>
#include <QPixmap>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 演示-textChanged信号
    ui->lineEdit->setValidator(new QIntValidator(this)); // 用于设置校验,只允许文本框中输入整数
    ui->lineEdit->setPlaceholderText("加数");
    ui->lineEdit_2->setValidator(new QIntValidator(this));
    ui->lineEdit_2->setPlaceholderText("被加数");
    ui->lineEdit_4->setPlaceholderText("和");

    // 演示-textFinished信号
     ui->lineEdit_10->setValidator(new QIntValidator(this));
     ui->lineEdit_10->setPlaceholderText("减数");
     ui->lineEdit_3->setValidator(new QIntValidator(this));
     ui->lineEdit_3->setPlaceholderText("被减数");
     ui->lineEdit_5->setPlaceholderText("差");

}

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



void Widget::on_pushButton_2_clicked()
{
    ui->lineEdit_6->clear();
    ui->lineEdit_6->setEchoMode(QLineEdit::Normal); //这个版本里面没有
    ui->lineEdit_6->setPlaceholderText("Normal");
}
//密码模式
void Widget::on_pushButton_3_clicked()
{
    ui->lineEdit_6->clear();
    ui->lineEdit_6->setEchoMode(QLineEdit::Password);
    ui->lineEdit_6->setPlaceholderText("Password");
}
//无回显
void Widget::on_pushButton_4_clicked()
{
    ui->lineEdit_6->clear();
    ui->lineEdit_6->setEchoMode(QLineEdit::NoEcho);
    ui->lineEdit_6->setPlaceholderText("NoEcho");
}
//失去焦点
void Widget::on_pushButton_5_clicked()
{
    ui->lineEdit_6->clear();
    ui->lineEdit_6->setEchoMode(QLineEdit::PasswordEchoOnEdit);
    ui->lineEdit_6->setPlaceholderText("PasswordEchoOnEdit");
}

void Widget::on_pushButton_clicked()
{
    QMessageBox::information(this, "回显模式", ui->lineEdit_6->text());
}

void Widget::on_pushButton_6_clicked()
{
    ui->lineEdit_7->setAlignment(Qt::AlignLeft);
    ui->lineEdit_7->setPlaceholderText("Left");
}

void Widget::on_pushButton_7_clicked()
{
    ui->lineEdit_7->setAlignment(Qt::AlignCenter);
    ui->lineEdit_7->setPlaceholderText("Center");
}

void Widget::on_pushButton_8_clicked()
{
    ui->lineEdit_7->setAlignment(Qt::AlignRight);
    ui->lineEdit_7->setPlaceholderText("Right");
}
//可读可写
void Widget::on_pushButton_10_clicked()
{
    ui->lineEdit_8->setReadOnly(false);
    ui->lineEdit_8->setPlaceholderText("ReadWrite");
}
//只读
void Widget::on_pushButton_11_clicked()
{
    ui->lineEdit_8->setReadOnly(true);
    ui->lineEdit_8->setPlaceholderText("ReadOnly");
}
//禁能
void Widget::on_pushButton_12_clicked()
{
    ui->lineEdit_8->setEnabled(false);
    ui->lineEdit_8->setPlaceholderText("Disabled");
}
//使能
void Widget::on_pushButton_13_clicked()
{
    ui->lineEdit_8->setEnabled(true);
    ui->lineEdit_8->setPlaceholderText("Enabled");
}

void Widget::on_pushButton_9_clicked()
{
    QMessageBox::information(this, "文本框演示", ui->lineEdit_8->text());
}

void Widget::on_pushButton_14_clicked()
{
    ui->lineEdit_9->setInputMask("");
}

void Widget::on_pushButton_15_clicked()
{
    // 9 - 表示要求输入0-9的数字
     // ;# - 表示格式字符串结束,并且未输入时显示#
     ui->lineEdit_9->setInputMask("99999999999;#");
}

void Widget::on_pushButton_16_clicked()
{
    // 9 - 表示要求输入0-9的数字
    // ;# - 表示格式字符串结束,并且未输入时显示*
    ui->lineEdit_9->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;*");
}

void Widget::on_lineEdit_textChanged(const QString &arg1)
{
    int sum = arg1.toInt() + ui->lineEdit_2->text().toInt();
    ui->lineEdit_4->setText(QString::number(sum));
}

void Widget::on_lineEdit_cursorPositionChanged(int arg1, int arg2)
{

}

void Widget::on_lineEdit_2_textChanged(const QString &arg1)
{
    int sum = arg1.toInt() + ui->lineEdit->text().toInt();
    ui->lineEdit_4->setText(QString::number(sum));
}

void Widget::on_lineEdit_10_editingFinished()
{
    int sum = ui->lineEdit_10->text().toInt() - ui->lineEdit_3->text().toInt();
    ui->lineEdit_5->setText(QString::number(sum));
}

void Widget::on_lineEdit_3_editingFinished()
{
    int sum = ui->lineEdit_10->text().toInt() - ui->lineEdit_3->text().toInt();
    ui->lineEdit_5->setText(QString::number(sum));
}

单选按钮

#include "widget.h"
#include "ui_widget.h"
#include <QButtonGroup>
#include <QDebug>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 设置第1组中的默认显示
    ui->radioButton->setChecked(true);
    ui->radioButton_3->setChecked(true);

    // 使用 QButtonGroup 对单选按钮进行分组
     mButtonGroupGender = new QButtonGroup(this);
     mButtonGroupGender->addButton(ui->radioButton_7,0);
     mButtonGroupGender->addButton(ui->radioButton_8,1);

     mButtonGroupEdu = new QButtonGroup(this);
     mButtonGroupEdu->addButton(ui->radioButton_9,10);
     mButtonGroupEdu->addButton(ui->radioButton_10,11);
     mButtonGroupEdu->addButton(ui->radioButton_11,12);
     mButtonGroupEdu->addButton(ui->radioButton_12,13);

     connect(ui->radioButton_7, &QRadioButton::clicked, this, &Widget::onRadioButtonClicked);
     connect(ui->radioButton_8, &QRadioButton::clicked, this, &Widget::onRadioButtonClicked);
     connect(ui->radioButton_9, &QRadioButton::clicked, this, &Widget::onRadioButtonClicked);
     connect(ui->radioButton_10, &QRadioButton::clicked, this, &Widget::onRadioButtonClicked);
     connect(ui->radioButton_11, &QRadioButton::clicked, this, &Widget::onRadioButtonClicked);
     connect(ui->radioButton_12, &QRadioButton::clicked, this, &Widget::onRadioButtonClicked);

     // 设置第2组中的默认显示
     ui->radioButton_8->setChecked(true);
     ui->radioButton_9->setChecked(true);
}

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

void Widget::on_pushButton_clicked()
{
    QString s = "性别: ";

     if(ui->radioButton->isChecked()) {
         s += ui->radioButton->text();
     } else if(ui->radioButton_2->isChecked()) {
         s += ui->radioButton_2->text();
     }
    QString s1 = "学历: ";
     if(ui->radioButton_3->isChecked()) {
         s1 += ui->radioButton_3->text();
     } else if(ui->radioButton_4->isChecked()) {
         s1 += ui->radioButton_4->text();
     } else if(ui->radioButton_5->isChecked()) {
         s1 += ui->radioButton_5->text();
     } else if(ui->radioButton_6->isChecked()) {
         s1 += ui->radioButton_6->text();
     }
    QString s2 = s+ " " + s1;
    ui->lineEdit->setText(s2);
}

void Widget::onRadioButtonClicked()
{
    QString s = "性别: ";

     int checkedGenderId = mButtonGroupGender->checkedId();
     if(checkedGenderId == 0) {
         s += "男";
     } else if(checkedGenderId == 1) {
         s += "女";
     }
    QString s1 = "学历: ";
     int checkedEduId = mButtonGroupEdu->checkedId();
     if(checkedEduId == 10) {
         s1 += "博士";
     } else if(checkedEduId == 11) {
         s1 += "硕士";
     } else if(checkedEduId == 12) {
         s1 += "本科";
     } else if(checkedEduId == 13) {
         s1 += "其他";
     }
    QString s2 = s+ " " + s1;
     ui->lineEdit_2->setText(s2);
}

void Widget::on_radioButton_7_clicked()
{

}

void Widget::on_radioButton_7_toggled(bool checked)
{
    qDebug()<< "rbMale4 state changed: " << checked;
}

工程在class_ten

复选按钮

#include "widget.h"
#include "ui_widget.h"

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

    // 5个复选按钮对应同一个槽函数
        connect(ui->checkBox_2, &QCheckBox::stateChanged, this, &Widget::onStateChanged);
        connect(ui->checkBox_3, &QCheckBox::stateChanged, this, &Widget::onStateChanged);
        connect(ui->checkBox_4, &QCheckBox::stateChanged, this, &Widget::onStateChanged);
        connect(ui->checkBox_5, &QCheckBox::stateChanged, this, &Widget::onStateChanged);
        connect(ui->checkBox_6, &QCheckBox::stateChanged, this, &Widget::onStateChanged);
}

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

void Widget::onStateChanged()
{
    QString s;

        int appleChecked = ui->checkBox_2->isChecked();
        int peachChecked = ui->checkBox_3->isChecked();
        int pearChecked = ui->checkBox_4->isChecked();
        int orangeChecked = ui->checkBox_5->isChecked();
        int bananaChecked = ui->checkBox_6->isChecked();

        if(appleChecked && peachChecked && pearChecked && orangeChecked && bananaChecked) {
            // 全部选中
            ui->checkBox->setCheckState(Qt::Checked);
        } else if (!(appleChecked || peachChecked || pearChecked || orangeChecked || bananaChecked)) {
            // 全部未选中
            ui->checkBox->setCheckState(Qt::Unchecked);
        } else {
            // 部分选中
            ui->checkBox->setCheckState(Qt::PartiallyChecked);
        }

        if(appleChecked) {
            s += ui->checkBox_2->text() += " ";
        }
        if(pearChecked) {
            s += ui->checkBox_3->text() += " ";
        }
        if(peachChecked) {
            s += ui->checkBox_4->text() += " ";
        }
        if(orangeChecked) {
            s += ui->checkBox_5->text() += " ";
        }
        if(bananaChecked) {
            s += ui->checkBox_6->text() += " ";
        }

        ui->lineEdit->setText(s);
}

void Widget::on_checkBox_clicked()
{
    // 这里需要将“全选”按钮的三态设置为false
        // 也就是在鼠标点击时,只允许在checked和unchecked之间切换,不允许出现半选状态
        ui->checkBox->setTristate(false);

        Qt::CheckState state = ui->checkBox->checkState();

        if(state == Qt::Checked) {
            ui->checkBox_2->setChecked(true);
            ui->checkBox_3->setChecked(true);
            ui->checkBox_4->setChecked(true);
            ui->checkBox_5->setChecked(true);
            ui->checkBox_6->setChecked(true);
        } else if (state == Qt::Unchecked){
            ui->checkBox_2->setChecked(false);
            ui->checkBox_3->setChecked(false);
            ui->checkBox_4->setChecked(false);
            ui->checkBox_5->setChecked(false);
            ui->checkBox_6->setChecked(false);
        } else {

        }
}

代码在class_eleven

组合框

#include "widget.h"
#include "ui_widget.h"

QStringList string2List = {"杭州市","湖州市","绍兴市","宁波市","嘉兴市"};
QStringList string3List = {"唐山市","邯郸市","秦皇岛市","保定市","张家口市"};
QStringList string4List = {"北京1市","北京2市","北京3市","北京4市","北京5市"};
QStringList string5List = {"济南市","青岛市","烟台市","威海市","淄博市"};

QStringList string6List = {"杭州大学","湖州大学","绍兴大学","宁波大学","嘉兴大学"};
QStringList string7List = {"唐山大学","邯郸大学","秦皇岛大学","保定大学","张家口大学"};
QStringList string8List = {"北京1大学","北京2大学","北京3大学","北京4大学","北京5大学"};
QStringList string9List = {"济南大学","青岛大学","烟台大学","威海大学","淄博大学"};

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

    //添加省份
    QString string[] = {"浙江","河北","北京","山东省"};
    QString string1[] = {":/png/吹风机.png",":/png/美妆刷.png",
                         ":/png/美妆蛋.png",":/png/香水.png"};
    int i = 0;
    for (i = 0; i < 4; i++) {
        ui->comboBox_2->addItem(string[i]);
        ui->comboBox_2->setItemIcon(i,QIcon(string1[i]));
    }

    //添加城市
    ui->comboBox_3->addItems(string2List);


    connect(ui->comboBox, SIGNAL(currentIndexChanged(int)),this, SLOT(onCboProvinceChange(int)));
    connect(ui->comboBox_2, SIGNAL(currentIndexChanged(int)),this, SLOT(onCbodaxueChange(int)));
    connect(ui->comboBox_3, SIGNAL(currentIndexChanged(int)),this, SLOT(onCbocityChange(int)));
}

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

void Widget::onCboProvinceChange(int index)
{
    ui->comboBox_3->clear();
    switch (index) {
    case 0:
        ui->comboBox_3->addItems(string2List);
        break;
    case 1:
        ui->comboBox_3->addItems(string3List);
        break;
    case 2:
        ui->comboBox_3->addItems(string4List);
        break;
    case 3:
        ui->comboBox_3->addItems(string5List);
        break;
    default:
        break;
    }

    QString name = ui->lineEdit->text();
    QString city = ui->comboBox_2->currentText();
    QString Province = ui->comboBox_3->currentText();
    QString daxue = ui->comboBox->currentText();

    ui->lineEdit_2->setText(name+"毕业于"+daxue +"来自"+Province+city);
}

void Widget::onCbodaxueChange(int index)
{
    ui->comboBox->clear();
    switch (index) {
    case 0:
        ui->comboBox->addItems(string6List);
        break;
    case 1:
        ui->comboBox->addItems(string7List);
        break;
    case 2:
        ui->comboBox->addItems(string8List);
        break;
    case 3:
        ui->comboBox->addItems(string9List);
        break;
    default:
        break;
    }

    QString name = ui->lineEdit->text();
    QString city = ui->comboBox_2->currentText();
    QString Province = ui->comboBox_3->currentText();
    QString daxue = ui->comboBox->currentText();

    ui->lineEdit_2->setText(name+"毕业于"+daxue +"来自"+Province+city);
}

void Widget::onCbocityChange(int index)
{
    QString name = ui->lineEdit->text();
    QString city = ui->comboBox_2->currentText();
    QString Province = ui->comboBox_3->currentText();
    QString daxue = ui->comboBox->currentText();

    ui->lineEdit_2->setText(name+"毕业于"+daxue +"来自"+Province+city);
}

工程在class_tweive里面

微调框

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置单价
    ui->dsbPrice->setMaximum(99.99); //最高价
    ui->dsbPrice->setMinimum(1.00);//反之
    //ui->dsbPrice->setRange(1.00, 99.99);

    ui->dsbPrice->setPrefix("$");
    //设置步长
    ui->dsbPrice->setSingleStep(0.5);
    //设置加速
    ui->dsbPrice->setAccelerated(true);
    //设置循环
    ui->dsbPrice->setWrapping(true);

    ui->sbWight->setMaximum(200);
    ui->sbWight->setMinimum(100);
     ui->sbWight->setSuffix("KG");
    ui->sbWight->setSingleStep(2);
    ui->sbWight->setAccelerated(true);
    ui->sbWight->setWrapping(true);
}

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

void Widget::on_dsbPrice_valueChanged(double arg1)
{
    double price = arg1;

    int weight = ui->sbWight->value();
    ui->lineEdit->setText(QString::number(price*weight));
}

void Widget::on_sbWight_valueChanged(int arg1)
{
    int weight = arg1;

    double price = ui->dsbPrice->value();
    ui->lineEdit->setText(QString::number(price*weight));
}

代码在class_thirteen里面

滑动条

#include "widget.h"
#include "ui_widget.h"

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

    //初始化红色滚动条
    ui->horizontalSlider->setMaximum(255);
    ui->horizontalSlider->setMinimum(0);

    //设置步长
    ui->horizontalSlider->setSingleStep(1);
    ui->horizontalSlider->setPageStep(10);

    ui->horizontalSlider->setOrientation(Qt::Horizontal);

    //绿色
    ui->horizontalSlider_2->setMaximum(255);
    ui->horizontalSlider_2->setMinimum(0);

    //设置步长
    ui->horizontalSlider_2->setSingleStep(1);
    ui->horizontalSlider_2->setPageStep(10);

    ui->horizontalSlider_2->setOrientation(Qt::Horizontal);

    //蓝色
    ui->horizontalSlider_3->setMaximum(255);
    ui->horizontalSlider_3->setMinimum(0);

    //设置步长
    ui->horizontalSlider_3->setSingleStep(1);
    ui->horizontalSlider_3->setPageStep(10);

    ui->horizontalSlider_3->setOrientation(Qt::Horizontal);


    //设置文本框的背景色
    //QString style = "background-color: rgb(255, 0, 255)";
    //ui->lineEdit->setStyleSheet(style);
    QString red = QString::number(ui->horizontalSlider->value());
    QString green = QString::number(ui->horizontalSlider_2->value());
    QString blue = QString::number(ui->horizontalSlider_3->value());
    ui->leRed->setText(red);

    QString style = "background-color: rgb(" + red + "," + green + "," + blue + ")";
    ui->lineEdit->setStyleSheet(style);


}

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

void Widget::on_horizontalSlider_valueChanged(int value)
{
    QString red = QString::number(value);
    QString green = QString::number(ui->horizontalSlider_2->value());
    QString blue = QString::number(ui->horizontalSlider_3->value());
    ui->leRed->setText(red);

    QString style = "background-color: rgb(" + red + "," + green + "," + blue + ")";
    ui->lineEdit->setStyleSheet(style);
}

void Widget::on_horizontalSlider_2_valueChanged(int value)
{
    QString green = QString::number(value);
    QString red= QString::number(ui->horizontalSlider->value());
    QString blue = QString::number(ui->horizontalSlider_3->value());
    ui->legreen->setText(green);
    QString style = "background-color: rgb(" + red + "," + green + "," + blue + ")";
    ui->lineEdit->setStyleSheet(style);
}

void Widget::on_horizontalSlider_3_valueChanged(int value)
{
    QString blue = QString::number(value);
    QString red= QString::number(ui->horizontalSlider->value());
    QString green = QString::number(ui->horizontalSlider_2->value());
    ui->lineEdit_4->setText(blue);
    QString style = "background-color: rgb(" + red + "," + green + "," + blue + ")";
    ui->lineEdit->setStyleSheet(style);
}

代码在class_fourteen里面

滚动条

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QMessageBox>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 1.下载
       ui->pbDownload->setMinimum(0);
       ui->pbDownload->setMaximum(100);
       // ui->pbDownload->setRange(0, 100);

       // 设置文本的显示位置
     ui->pbDownload->setAlignment(Qt::AlignRight);
       // 设置是否显示文本
       // ui->pbDownload->setTextVisible(false);
    mTimerDownload = new QTimer(this);
    mTimerDownload->setInterval(100);


    mTimerCopy= new QTimer(this);

    connect(ui->pushButton, &QPushButton::clicked, this, &Widget::onBtenDown);
    connect(mTimerDownload, &QTimer::timeout, this, &Widget::onBtenDownTimeOut);

    // 2.拷贝
    ui->pbCopy->setMinimum(0);
    ui->pbCopy->setMaximum(1000);
    // ui->pbCopy->setRange(0, 1000);

    mTimerCopy = new QTimer();
    mTimerCopy->setInterval(12);



    connect(ui->pushButton_2, &QPushButton::clicked, this, &Widget::onBtencopy);
    connect(mTimerCopy, &QTimer::timeout, this, &Widget::onBtencopyTimeOut);
}

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

void Widget::onBtenDown()
{
    ui->pbCopy->reset();
    mTimerDownload->start();
}

void Widget::onBtencopy()
{
    ui->pbCopy->reset();
    mTimerCopy->start();
}

void Widget::onBtenDownTimeOut()
{
    int currentValue = ui->pbDownload->value();

        if(currentValue >= ui->pbDownload->maximum()) {
            mTimerDownload->stop();
            QMessageBox::information(this, "提示", "文件下载完成!");
        } else {
            ui->pbDownload->setValue(ui->pbDownload->value() + 1);
            qDebug() << ui->pbDownload->value();
        }
}

void Widget::onBtencopyTimeOut()
{
    int currentValue = ui->pbCopy->value();

        if(currentValue >= ui->pbCopy->maximum()) {
            mTimerCopy->stop();
            QMessageBox::information(this, "提示", "文件拷贝完成!");
        } else {
            ui->pbCopy->setValue(ui->pbCopy->value() + 1);
            qDebug() << ui->pbCopy->value();
        }
}

列表框

QStringList iconStringList = {
    ":/icon/apple.ico",
    ":/icon/banana.ico",
    ":/icon/orange.ico",
    ":/icon/peach.ico",
    ":/icon/strawberry.ico"
};

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

    // 默认是列表模式
    mBtnGroup = new QButtonGroup(this);
    mBtnGroup->addButton(ui->rbListMode, 0);
    mBtnGroup->addButton(ui->rbIconMode, 1);
    connect(ui->rbListMode, &QRadioButton::clicked, this, &Widget::onRadioButtonClicked);
    connect(ui->rbIconMode, &QRadioButton::clicked, this, &Widget::onRadioButtonClicked);
    ui->rbListMode->setChecked(true);
    ui->lwProvince->setViewMode(QListView::ListMode);

    // 条目单击和双击的信号槽
    connect(ui->lwProvince, &QListWidget::itemClicked, this, &Widget::onItemClicked);
    connect(ui->lwProvince, &QListWidget::itemDoubleClicked, this, &Widget::onItemDoubleClicked);

    // add/insert/delete
    connect(ui->btnAdd, &QPushButton::clicked, this, &Widget::onBtnAddClicked);
    connect(ui->btnInsert, &QPushButton::clicked, this, &Widget::onBtnInsertClicked);
    connect(ui->btnDelete, &QPushButton::clicked, this, &Widget::onBtnDeleteClicked);
}

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

// 切换显示模式:列表模式、图标模式
void Widget::onRadioButtonClicked()
{
    int checkedId = mBtnGroup->checkedId();
    if(checkedId == 0) {
        ui->lwProvince->setViewMode(QListView::ListMode);
    } else if(checkedId == 1) {
        ui->lwProvince->setViewMode(QListView::IconMode);
    }
}

// 条目单击时,显示到文本框
void Widget::onItemClicked(QListWidgetItem *item)
{
    ui->leCurrentItem->setText(item->text());
}

// 双击条目时,变为可编辑模式
void Widget::onItemDoubleClicked(QListWidgetItem *item)
{
    item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled);
}

// 在最后插入
void Widget::onBtnAddClicked()
{
    int iconIndex = QRandomGenerator::global()->generate()%5; //产生5以内的随机数 0-4
    qDebug() << iconIndex;

    QIcon icon(iconStringList[iconIndex]);
    QString text = ui->leInput->text();

    QListWidgetItem* item = new QListWidgetItem(icon, text);
    ui->lwProvince->addItem(item);
}

// 在当前行之前插入
void Widget::onBtnInsertClicked()
{
    int iconIndex = QRandomGenerator::global()->generate()%5; // 产生5以内的随机数 0-4

    QIcon icon(iconStringList[iconIndex]);
    QString text = ui->leInput->text();

    QListWidgetItem* item = new QListWidgetItem(icon, text);

    int currentRow = ui->lwProvince->currentRow();
    ui->lwProvince->insertItem(currentRow, item);
}

// 删除选定的条目
void Widget::onBtnDeleteClicked()
{
#if 0
    // 方法一
    QListWidgetItem* item = ui->lwProvince->currentItem();
    ui->lwProvince->removeItemWidget(item);
    delete item;
#else
    // 方法二
    int row = ui->lwProvince->currentRow();
    QListWidgetItem* item = ui->lwProvince->takeItem(row);
    delete item;
#endif
}

表格控件

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

    // 1. 初始化列表控件

    // 1.1 共有4列,并添加列的名称
    ui->twStudent->setColumnCount(4);

    QStringList horizontalHeader;
    horizontalHeader << "姓名";
    horizontalHeader << "性别";
    horizontalHeader << "年龄";
    horizontalHeader << "籍贯";

    ui->twStudent->setHorizontalHeaderLabels(horizontalHeader);

    // 1.2 设置列的宽度
    // 先设置自适应宽度,再单独设置某一列的宽度规则
    ui->twStudent->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);    //先自适应宽度
    // 然后,可以单独设置某一列根据内容调整宽度
//    ui->twStudent->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
    // 或者,可以单独设置某一列为固定宽度
//    ui->twStudent->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
//    ui->twStudent->setColumnWidth(0, 80);

    // 1.3 添加几行初始化数据
    appendOneRow("李雷", "男", 12, "广东");
    appendOneRow("韩梅梅", "女", 11, "北京");
    appendOneRow("林涛", "男", 13, "上海");



    // 2. 设置行表头是否显示
    // 首先根据在属性窗口中设置的属性,初始化复选框
    if(ui->twStudent->horizontalHeader()->isHidden()) {
        ui->cboHHeader->setChecked(false);
    } else {
        ui->cboHHeader->setChecked(true);
    }

    // 点击复选框时,显示或者隐藏行表头
    connect(ui->cboHHeader, &QCheckBox::stateChanged, this, [=](int state) {
        if(state == Qt::Checked) {
            ui->twStudent->horizontalHeader()->show();
        } else if(state == Qt::Unchecked) {
            ui->twStudent->horizontalHeader()->hide();
        }
    });

    // 3. 设置列表头是否显示
    // 首先根据在属性窗口中设置的属性,初始化复选框
    if(ui->twStudent->verticalHeader()->isHidden()) {
        ui->cboVHeader->setChecked(false);
    } else {
        ui->cboVHeader->setChecked(true);
    }

    // 点击复选框时,显示或者隐藏列表头
    connect(ui->cboVHeader, &QCheckBox::stateChanged, this, [=](int state) {
        if(state == Qt::Checked) {
            ui->twStudent->verticalHeader()->show();
        } else if(state == Qt::Unchecked) {
            ui->twStudent->verticalHeader()->hide();
        }
    });

    // 4. 交替显示行的背景色
    // 首先根据在属性窗口中设置的属性,初始化复选框
    if(ui->twStudent->alternatingRowColors()) {
        ui->cboAlternate->setChecked(true);
    } else {
        ui->cboAlternate->setChecked(false);
    }

    // 点击复选框时,使能或者禁能交替背景色
    connect(ui->cboAlternate, &QCheckBox::stateChanged, this, [=](int state) {
        if(state == Qt::Checked) {
            ui->twStudent->setAlternatingRowColors(true);
        } else if(state == Qt::Unchecked) {
            ui->twStudent->setAlternatingRowColors(false);
        }
    });

    // 5. 设置单元格是否可编辑
    // 首先根据在属性窗口中设置的属性,初始化复选按钮
    int trigger = ui->twStudent->editTriggers();
    if(trigger == QAbstractItemView::NoEditTriggers) {
        ui->cboEditCell->setChecked(false);
    } else {
        ui->cboEditCell->setChecked(true);
    }

    // 点击复选按钮时,使能或者禁能单元格编辑
    connect(ui->cboEditCell, &QCheckBox::stateChanged, this, [=](int state) {
        if(state == Qt::Checked) {
            // 当双击单元格/选中单元格然后单击/按下编辑键F2,都可以编辑单元格。
            ui->twStudent->setEditTriggers(QAbstractItemView::DoubleClicked |
                                           QAbstractItemView::SelectedClicked |
                                           QAbstractItemView::EditKeyPressed);
        } else if(state == Qt::Unchecked) {
            ui->twStudent->setEditTriggers(QAbstractItemView::NoEditTriggers);
        }
    });

    // 6. 设置行选择还是单元格选择
    // 首先根据在属性窗口中设置的属性,初始化单选按钮的选中状态
    int selectionBehavior = ui->twStudent->selectionBehavior();
    if(selectionBehavior == QAbstractItemView::SelectItems) {
        ui->rbCell->setChecked(true);
    } else if(selectionBehavior == QAbstractItemView::SelectRows){
        ui->rbRow->setChecked(true);
    }

    // 点击单选按钮时,使能单元格选中或者行选中
    mButtonGroupSelection = new QButtonGroup(this);
    mButtonGroupSelection->addButton(ui->rbCell, 0);
    mButtonGroupSelection->addButton(ui->rbRow, 1);
    connect(ui->rbCell, &QRadioButton::clicked, this, &Widget::onSelectionRadioButtonClicked);
    connect(ui->rbRow, &QRadioButton::clicked, this, &Widget::onSelectionRadioButtonClicked);

    // 7. 单元格点击时, 将对应行的数据显示到文本框
    connect(ui->twStudent, &QTableWidget::itemClicked, this, &Widget::onItemClicked);
}

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

void Widget::appendOneRow(QString name, QString gender, int age, QString province)
{
    // 获取当前行数
    int count = ui->twStudent->rowCount();
    qDebug() << "current count:" << count;

    // 设置当前行数
    ui->twStudent->setRowCount(count+1);

    QTableWidgetItem* nameItem = new QTableWidgetItem(name);
    QTableWidgetItem* genderItem = new QTableWidgetItem(gender);
    QTableWidgetItem* ageItem = new QTableWidgetItem(QString::number(age));
    QTableWidgetItem* provinceItem = new QTableWidgetItem(province);

    nameItem->setTextAlignment(Qt::AlignCenter);
    genderItem->setTextAlignment(Qt::AlignCenter);
    ageItem->setTextAlignment(Qt::AlignCenter);
    provinceItem->setTextAlignment(Qt::AlignCenter);

    ui->twStudent->setItem(count, 0, nameItem);
    ui->twStudent->setItem(count, 1, genderItem);
    ui->twStudent->setItem(count, 2, ageItem);
    ui->twStudent->setItem(count, 3, provinceItem);
}

void Widget::insertOneRow(int row, QString name, QString gender, int age, QString province)
{
    ui->twStudent->insertRow(row);

    // 上面 insertRow 只是插入一个空行,需要手动添加每个单元格的内容
    QTableWidgetItem* nameItem = new QTableWidgetItem(name);
    QTableWidgetItem* genderItem = new QTableWidgetItem(gender);
    QTableWidgetItem* ageItem = new QTableWidgetItem(QString::number(age));
    QTableWidgetItem* provinceItem = new QTableWidgetItem(province);

    nameItem->setTextAlignment(Qt::AlignCenter);
    genderItem->setTextAlignment(Qt::AlignCenter);
    ageItem->setTextAlignment(Qt::AlignCenter);
    provinceItem->setTextAlignment(Qt::AlignCenter);

    ui->twStudent->setItem(row, 0, nameItem);
    ui->twStudent->setItem(row, 1, genderItem);
    ui->twStudent->setItem(row, 2, ageItem);
    ui->twStudent->setItem(row, 3, provinceItem);
}

void Widget::on_btnAppend_clicked()
{
    QString name = ui->leName->text();
    QString gender = ui->leGender->text();
    int age = ui->leAge->text().toInt();
    QString province = ui->leProvince->text();

    appendOneRow(name, gender, age, province);
}

void Widget::on_btnInsert_clicked()
{
    QString name = ui->leName->text();
    QString gender = ui->leGender->text();
    int age = ui->leAge->text().toInt();
    QString province = ui->leProvince->text();

    // 获取当前选中的行号
    int currentRow = ui->twStudent->currentRow();

    insertOneRow(currentRow, name, gender, age, province);
}

void Widget::on_btnDelete_clicked()
{
    // 获取当前选中的行号
    int currentRow = ui->twStudent->currentRow();
    ui->twStudent->removeRow(currentRow);
}

void Widget::on_btnModify_clicked()
{
    QString name = ui->leName->text();
    QString gender = ui->leGender->text();
    int age = ui->leAge->text().toInt();
    QString province = ui->leProvince->text();

    // 获取当前选中的行号
    int currentRow = ui->twStudent->currentRow();

    QTableWidgetItem* nameItem = new QTableWidgetItem(name);
    QTableWidgetItem* genderItem = new QTableWidgetItem(gender);
    QTableWidgetItem* ageItem = new QTableWidgetItem(QString::number(age));
    QTableWidgetItem* provinceItem = new QTableWidgetItem(province);

    nameItem->setTextAlignment(Qt::AlignCenter);
    genderItem->setTextAlignment(Qt::AlignCenter);
    ageItem->setTextAlignment(Qt::AlignCenter);
    provinceItem->setTextAlignment(Qt::AlignCenter);

    ui->twStudent->setItem(currentRow, 0, nameItem);
    ui->twStudent->setItem(currentRow, 1, genderItem);
    ui->twStudent->setItem(currentRow, 2, ageItem);
    ui->twStudent->setItem(currentRow, 3, provinceItem);
}

void Widget::onItemClicked(QTableWidgetItem *item)
{
    int row = item->row();

    QString name = ui->twStudent->item(row, 0)->text();
    QString gender = ui->twStudent->item(row, 1)->text();
    QString age = ui->twStudent->item(row, 2)->text();
    QString province = ui->twStudent->item(row, 3)->text();

    ui->leName->setText(name);
    ui->leGender->setText(gender);
    ui->leAge->setText(age);
    ui->leProvince->setText(province);
}

void Widget::on_btnStyleSheet_clicked()
{
    QString cellStyle = R"(
        QTableView
        {
            text-align:center;
            background-color: rgba(255, 255, 255, 0);
            alternate-background-color:#e3edf9;
            font:14px "微软雅黑";
            color:#677483;
            gridline-color: #ccddf0;
        }
    )";


    const QString horizontalHeaderStyle = R"(
        QHeaderView::section {
            color: black;
            font:bold 14px "微软雅黑";
            text-align:center;
            height:32px;
            background-color: #d1dff0;
            border:1px solid #8faac9;
            border-left:none;
        }
    )";

    const QString verticalHeaderStyle = R"(
        QHeaderView::section {
            color: black;
            font:bold 14px "微软雅黑";
            width:60px;
            text-align:center;

            background-color: #d1dff0;
            border:1px solid #8faac9;
            border-left:none;
        }
    )";

    ui->twStudent->setStyleSheet(cellStyle);
    ui->twStudent->horizontalHeader()->setStyleSheet(horizontalHeaderStyle);
    ui->twStudent->verticalHeader()->setStyleSheet(verticalHeaderStyle);
}

void Widget::onSelectionRadioButtonClicked()
{
    int checkedId = mButtonGroupSelection->checkedId();
    if(checkedId == 0) {
        ui->twStudent->setSelectionMode(QAbstractItemView::SingleSelection);
        ui->twStudent->setSelectionBehavior(QAbstractItemView::SelectItems);
    } else if (checkedId == 1) {
        ui->twStudent->setSelectionMode(QAbstractItemView::SingleSelection);
        ui->twStudent->setSelectionBehavior(QAbstractItemView::SelectRows);
    }
}

给控件添加文字和图片

    //这是第一个界面
    this->setWindowTitle("仓库管理系统");
    this->setWindowIcon(QIcon(":/image/仓库.png"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了使更多的Qt初学者能尽快入门Qt,也为了QtQt Creator的快速普及,我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显,虽然教程的语言可能不规范,但是它却被数十万网友所认可。我们会将这一系列教程一直写下去,它将涉及Qt的方方面面 一、Qt Creator的安装和hello world程序的编写 二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针 十、Qt Creator中实现定时器和产生随机数 十一、Qt 2D绘图(一)绘制简单图形 十二、Qt 2D绘图(二)渐变填充 十三、Qt 2D绘图(三)绘制文字 十四、Qt 2D绘图(四)绘制路径 十五、Qt 2D绘图(五)显示图片 十六、Qt 2D绘图(六)坐标系统 十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十九、Qt 2D绘图(九)双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL数据库驱动插件 二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一) 二十四、Qt数据库(四)利用QSqlQuery类执行SQL语句(二) 二十五、Qt数据库(五)QSqlQueryModel 二十六、Qt数据库(六)QSqlTableModel 二十七、Qt数据库(七)QSqlRelationalTableModel 二十八、Qt数据库(八)XML(一) 二十九、Qt数据库(九)XML(二) 三十、Qt数据库(十)XML(三) 三十一、Qt 4.7.0及Qt Creator 2.0 beta版安装全程图解 三十二、第一个Qt Quick程序(QML程序) 三十三、体验QML演示程序 三十四、Qt Quick Designer介绍 三十五、QML组件 三十六、QML项目之Image和BorderImage 三十七、Flipable、Flickable和状态与动画 三十八、QML视图 三十九、QtDeclarative模块 四十、使用Nokia Qt SDK开发Symbian和Maemo终端软件 四十一、Qt网络(一)简介 四十二、Qt网络(二)HTTP编程 四十三、Qt网络(三)FTP(一) 四十四、Qt网络(四)FTP(二) 四十五、Qt网络(五)获取本机网络信息 四十六、Qt网络(六)UDP 四十七、Qt网络(七)TCP(一) 四十八、Qt网络(八)TCP(二)
Python 是一种用于创建图形用户界面(GUI)的 Python 绑定的框架。它是基于 Qt 库,一个跨平台的 C++ 库,用于构建 GUI 应用程序。Python Qt 提供了许多用于创建 GUI 应用程序的工具和组件,使开发者能够轻松地创建出外观精美、功能强大的应用程序。 以下是一些学习 Python Qt 的步骤: 1. 安装 PyQt5:在你的操作系统上安装 PyQt5 的库和工具,以便开始使用 Python Qt。可以通过 pip 安装 PyQt5。 2. 学习 Qt Designer:Qt Designer 是一个可视化设计工具,用于创建 GUI 应用程序的用户界面。学习如何使用 Qt Designer 并将它与 Python Qt 一起使用是 Python Qt 的重要部分。 3. 学习基础控件:Python Qt 提供了许多控件,例如按钮、标签、文本框等等。学习如何使用这些控件以及如何处理它们的事件。 4. 学习布局管理器:布局管理器用于控制窗口中控件的位置和大小。学习如何使用布局管理器以及如何创建自定义布局管理器。 5. 学习信号和槽:信号和槽是用于控制应用程序中事件的机制。学习如何使用信号和槽以及如何创建自定义信号和槽。 6. 学习绘图和动画:Python Qt 提供了强大的绘图和动画功能,用于创建自定义控件和动态效果。学习如何使用这些功能以及如何创建自定义绘图和动画。 7. 学习数据库编程:Python Qt 提供了用于与数据库交互的工具。学习如何使用这些工具以及如何在应用程序中使用数据库。 以上是学习 Python Qt 的基本步骤,你可以通过阅读官方文档和书籍,或者参加在线教育课程来加深理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值