QT - Day 4
1 界面布局
- 实现登录窗口
- 利用布局方式,给窗口类化
- 选取Widget进行布局,水平布局,垂直布局,栅格布局
- 给用户名、密码、登录、退出按钮进行布局
- 默认窗口和控件之间有9间隙,可以调整layoutLeftMargin
- 利用弹簧进行布局

2 控件
- 按钮组
1) QPushButton 常用按钮
2) QToolButton 工具按钮 用于显示图片 文字 修改风格等等
3) toolButtonStyle 凸起风格 autoRaise
4) radioButton 单选按钮, 设为默认
5) checkbox 多选按钮 监听状态 2 选中 1半选 0 未选
6)
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QRadioButton>
#include <QListWidgetItem> Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this); //设置单选按钮, 默认选择男
ui->rbtman->setChecked(true);
//选择女,打印信息
connect(ui->rbtwomen,&QRadioButton::clicked,[=](){
qDebug()<<"选择女";
}); //多选按钮
connect(ui->ck_1,&QCheckBox::stateChanged,[=](int state){
qDebug()<<state;
}); }

- QListWidget 列表容器
1) QListWigetItem *Item 一行内容
2) ui->listWidget->additem(item)
3) 设置居中方式 item->setTextAlignment(Qt::AlignHCenter);
4) 可以利用 additems 一次性添加所有内容
5)
// ListWidget
// QListWidgetItem *Item = new QListWidgetItem("锄头日当午");
// ui->listWidget->addItem(Item);
// Item->setTextAlignment(Qt::AlignHCenter); QStringList list;
list<<"锄禾日当午"<<"汗滴禾下土"<<"谁知盘中餐"<<"粒粒皆辛苦";
ui->listWidget->addItems(list);
- 其他控件介绍
1) stackedWidget 栈控件
ui->stackedWidget->setCurrentIndex(1);
2) 下拉框
ui->comboxBox->additem(“ABC”);
3) QLabel 显示图片
ui->lbl_Image->setPixmap(QPixmap(“:/Image/panda.png”));
4) QLabel 显示动图
ui->lbl_movie->setMovie(movie);
movie->start();
5) TableWidget控件的代码使用
//设置列数
ui->tableWidget->setColumnCount(3);
//设置行数
ui->tableWidget->setRowCount(5);
//设置水平表头
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
//设置正文
// ui->tableWidget->setItem(0,0,new QTableWidgetItem("亚瑟"));
QStringList nameList;
nameList<<"亚瑟"<<"张飞"<<"关羽"<<"刘备"<<"花木兰";
QList<QString> setList;
setList<<"男"<<"男"<<"男"<<"男"<<"女"; for(int i=0;i<5;i++)
{
int col = 0;
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]));
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(setList.at(i)));
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(i+18))); }
效果:

3. 自定义控件
- 添加新文件 – Qt – 设计师界面类 (.h .cpp .ui)
- ui中设计 QSpinBox和 QSlider 两个控件
- Widget中使用自定义控件, 拖着一个Widget,点击提升为, 点击添加,点击提升
- 实现功能,改变数字,滑动条跟着移动,信号槽监听
- 提供getNum和setNum 对外接口
- 测试接口
SmallWidget.cpp
#include "smallwidget.h"
#include "ui_smallwidget.h"
#include <QSpinBox>
#include <QSlider> SmallWidget::SmallWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::SmallWidget)
{
ui->setupUi(this);
//QSpinBox 移动 QSlider移动 void (QSpinBox:: *spSignal)(int) = &QSpinBox::valueChanged;
connect(ui->spinBox, spSignal,ui->horizontalSlider, &QSlider::setValue); //QSlider滑动 QSpinBox数字跟着改变
connect(ui->horizontalSlider, &QSlider::valueChanged, ui->spinBox, &QSpinBox::setValue); } SmallWidget::~SmallWidget()
{
delete ui;
} int SmallWidget::getnum()
{
return ui->spinBox->value();
} void SmallWidget::setnum(int num)
{
ui->spinBox->setValue(num);
}
SmallWidget.h
#ifndef SMALLWIDGET_H
#define SMALLWIDGET_H #include <QWidget> namespace Ui {
class SmallWidget;
} class SmallWidget : public QWidget
{
Q_OBJECT public:
explicit SmallWidget(QWidget *parent = nullptr);
~SmallWidget(); void setnum(int num);
int getnum(); private:
Ui::SmallWidget *ui;
}; #endif // SMALLWIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this); //获取值
connect(ui->btn_1,&QPushButton::clicked,[=](){
qDebug()<<ui->widget->getnum();
}); //设置值
connect(ui->btn_2,&QPushButton::clicked,[=](){
ui->widget->setnum(50);
});
} Widget::~Widget()
{
delete ui;
}

4. Qt中的事件
- 鼠标事件
- 鼠标进入事件 enterEvent
- 鼠标离开事件 leaveEvent
- 鼠标按下 mousePressEvent(QMouseEvent *ev)
- 鼠标释放 mouseReleaseEvent
- 鼠标移动 mouseMoveEvent
- ev->x() x坐标 ev->y() y坐标
- ev->button() 判断鼠标左右按键 Qt::LeftButton Qt::RightButton
- ev->buttons() 判断组合按键 判断move时候的左右键 结合 & 操作符
- 格式化字符串 QString(“%1 %2”).arg(111).arg(222)
myLabel.cpp
#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent> MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
//设置鼠标追踪状态
setMouseTracking(true); //没有这个api的话,鼠标移动时将不会触发mousemoveEvent事件
} void MyLabel::enterEvent(QEvent *event)
{
qDebug()<<"鼠标进入";
} void MyLabel::leaveEvent(QEvent *)
{
qDebug()<<"鼠标离开";
} void MyLabel::mousePressEvent(QMouseEvent *ev)
{
if(ev->button() == Qt::LeftButton)
{
QString str = QString("鼠标按下了 x = %1 y = %2 globalX = %3 globalY = %4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug() << str;
}
} void MyLabel::mouseMoveEvent(QMouseEvent *ev)
{
// if(ev->buttons() &Qt::LeftButton)
// {
QString str = QString("鼠标移动了 x = %1 y = %2 globalX = %3 globalY = %4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug() << str;
// } }
myLabel.h
#ifndef MYLABEL_H
#define MYLABEL_H #include <QLabel> class MyLabel : public QLabel
{
Q_OBJECT
public:
explicit MyLabel(QWidget *parent = nullptr); //鼠标进入
void enterEvent(QEvent*event); //鼠标离开
void leaveEvent(QEvent*); //鼠标按下
void mousePressEvent(QMouseEvent *); //鼠标移动
void mouseMoveEvent(QMouseEvent *ev); signals: }; #endif // MYLABEL_H
5. 定时器1
- 利用事件 void timerEvent(QTimerEvent *ev)
- 启动定时器 startTimer(1000) 毫秒单位
- timerEvent 的返回值是定时器的唯一标志 可以和ev->timerid 来做比较
6. 定时器2
- 利用定时器类 QTimer
- 创建定时器对象 QTimer *timer = new QTimer(this);
- 启动定时器 timer->start(毫秒)
- 每隔一定毫秒,发送信号 timeout,进行监听
- 暂停 timer->stop()
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTimer> Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this); id1= startTimer(1000);
id2 = startTimer(2000); //第二种定时器的方法
QTimer *timer = new QTimer();
timer->start(500);
connect(timer,&QTimer::timeout,[=](){
static int num2 = 1;
ui->label_4->setText(QString::number(num2++));
}); connect(ui->btn, &QPushButton::clicked,[=](){
timer->stop();
});
} Widget::~Widget()
{
delete ui;
} void Widget::timerEvent(QTimerEvent *ev)
{
static int num = 1;
static int num1 = 1;
if(ev->timerId() == id1)
{
ui->label_2->setText(QString::number(num++));
}
if(ev->timerId() == id2)
{
ui->label_3->setText(QString::number(num1++));
}
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H #include <QWidget> QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE class Widget : public QWidget
{
Q_OBJECT public:
Widget(QWidget *parent = nullptr);
~Widget(); void timerEvent(QTimerEvent *);
int id1;
int id2; private:
Ui::Widget *ui;
};
#endif // WIDGET_H
效果:

QT - Day 4的更多相关文章
- QT内省机制、自定义Model、数据库
本文将介绍自定义Model过程中数据库数据源的获取方法,我使用过以下三种方式获取数据库数据源: 创建 存储对应数据库所有字段的 结构体,将结构体置于容器中返回,然后根据索引值(QModelIndex) ...
- Ubuntu 下安装QT
Ubuntu 下安装QT 本文使用的环境 QT Library: qt-everywhere-opensource-src-4.7.4.tar.gz QT Creator: qt-creator-li ...
- Qt安装配置
Qt Creator: 下载: Qt 5.5.1 for Windows 32-bit(MinGW 4.9.2, 1.0 GB):http://download.qt.io/official_rele ...
- Qt信号与槽自动关联机制
参考链接1:http://blog.csdn.net/skyhawk452/article/details/6121407 参考链接2:http://blog.csdn.net/memory_exce ...
- 保持Qt GUI响应的几种方法
最开始使用Qt时就遇到过QT Gui失去响应的问题,我是用多线程的方式解决的,然而通常来说,多线程是会降低程序的运行速度. 之后,在使用QSqlQuery::execBatch()函数时,Qt Gui ...
- Qt 中使用Singleton模式需小心
在qt中,使用Singleton模式时一定要小心.因为Singleton模式中使用的是静态对象,静态对象是直到程序结束才被释放的,然而,一旦把该静态对象纳入了Qt的父子对象体系,就会导致不明确的行为. ...
- Qt——组件位置随窗口变化
当我们用Qt Designer设计界面时,有时会面临这样一个问题:需要在窗口指定位置放置组件,并且当窗口位置大小改变时,该组件相对其父对象的位置是不变的,如下面两幅图所示 ,首先看上面这幅图,注意bu ...
- (转) Qt 出现“undefined reference to `vtable for”原因总结
由于Qt本身实现的机制所限,我们在使用Qt制作某些软件程序的时候,会遇到各种各样这样那样的问题,而且很多是很难,或者根本找不到原因的,即使解决了问题,如果有人问你为什么,你只能回答--不知道. 今天我 ...
- qt中ui的 使用介绍
1.什么是ui?ui通常是用Qt 设计师设计出来的界面文件的后缀.通常情况下ui是一个指向这个界面类的指针.ui-> 一般就是用来访问这个界面类里面的控件.例如你的ui文件里有一个叫okButt ...
- Qt 开启鼠标跟踪,自动激活mouseMoveEvent的问题
最近在Qt上实现一个功能,鼠标在图片上移动,触发mouseMoveEvent事件,进而生成一个小的半透明窗口,放大显示以鼠标为中心的一个区域的图像并随鼠标移动.但是,必须鼠标摁下,才触发mouseMo ...
随机推荐
- [转帖]Navicat连接openGauss数据库报错
news/2023/10/19 21:23:19 错误信息:fe_sendauth:invalid authentication request from server:AUTH_REQ_SASL_C ...
- [转帖]AF_UNIX和AF_INET
https://www.cnblogs.com/shangerzhong/p/9153737.html family参数代表地址家族,比较常用的为AF_INET或AF_UNIX.AF_UNIX用于同一 ...
- Jmeter学习之四_kingbaseV8R6数据库的简单验证
Jmeter学习之四_kingbaseV8R6数据库的简单验证 背景 周一没去报道, 因为我忘记体检了... 继续在家进行学习提高自己. jmeter周末时开始看的. 今天想着继续研究一下对数据库的处 ...
- [转帖]Nginx惊群效应引起的系统高负载
https://zhuanlan.zhihu.com/p/401910162 原创:蒋院波 导语:本文从进程状态,进程启动方式,网络io多路复用纬度等方面知识,分享解决系统高负载低利用率的案例 前言: ...
- [转帖]调优"四剑客"的实战演练,福尔摩斯•K带你轻松优化性能
前言 天下武功,唯快不破.在侦探的世界中,破案效率永远是衡量一名侦探能力的不二法门.作为推理界冉冉升起的新星,大侦探福尔摩斯·K凭借着冷静的头脑.严谨的思维,为我们展现了一场场华丽而热血的推理盛宴. ...
- [转帖]Django系列3-Django常用命令
文章目录 一. Django常用命令概述 二. Django常用命令实例 2.1 help命令 2.2 version 2.3 check 2.4 startproject 2.5 startapp ...
- 【转帖】网卡bonding模式 - bond0、1、4配置
网卡bonding简介 网卡绑定就是把多张物理网卡通过软件虚拟成一个虚拟的网卡,配置完毕后,所有的物理网卡的ip和mac将会变成相同的.多网卡同时工作可以提高网络速度,还可以实现网卡的负载均衡.冗余. ...
- Python学习之五_字符串处理生成查询SQL
Python学习之五_字符串处理生成查询SQL 前言 昨天想给同事讲解一下获取查询部分表核心列信息的SQL方法 也写好了一个简单文档. 但是感觉不是很优雅. 最近两三天晚上一直在学习Python. 想 ...
- RabbitMQ 测试环境的简单创建于使用 permission vhost 以及 权限简单设置
之前用docker运行起来 rabbitmq的容器了 但是今天发现有问题. 简单沟通了下 需要进行处理. 方法主要是如下 1. 运行容器: docker run --name rabbitmq -ti ...
- 大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解
大语言模型的预训练[2]:GPT.GPT2.GPT3.GPT3.5.GPT4相关理论知识和模型实现.模型应用以及各个版本之间的区别详解 1.GPT 模型 1.1 GPT 模型简介 在自然语言处理问题中 ...