用于浏览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"));