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的更多相关文章

  1. QT内省机制、自定义Model、数据库

    本文将介绍自定义Model过程中数据库数据源的获取方法,我使用过以下三种方式获取数据库数据源: 创建 存储对应数据库所有字段的 结构体,将结构体置于容器中返回,然后根据索引值(QModelIndex) ...

  2. Ubuntu 下安装QT

    Ubuntu 下安装QT 本文使用的环境 QT Library: qt-everywhere-opensource-src-4.7.4.tar.gz QT Creator: qt-creator-li ...

  3. Qt安装配置

    Qt Creator: 下载: Qt 5.5.1 for Windows 32-bit(MinGW 4.9.2, 1.0 GB):http://download.qt.io/official_rele ...

  4. Qt信号与槽自动关联机制

    参考链接1:http://blog.csdn.net/skyhawk452/article/details/6121407 参考链接2:http://blog.csdn.net/memory_exce ...

  5. 保持Qt GUI响应的几种方法

    最开始使用Qt时就遇到过QT Gui失去响应的问题,我是用多线程的方式解决的,然而通常来说,多线程是会降低程序的运行速度. 之后,在使用QSqlQuery::execBatch()函数时,Qt Gui ...

  6. Qt 中使用Singleton模式需小心

    在qt中,使用Singleton模式时一定要小心.因为Singleton模式中使用的是静态对象,静态对象是直到程序结束才被释放的,然而,一旦把该静态对象纳入了Qt的父子对象体系,就会导致不明确的行为. ...

  7. Qt——组件位置随窗口变化

    当我们用Qt Designer设计界面时,有时会面临这样一个问题:需要在窗口指定位置放置组件,并且当窗口位置大小改变时,该组件相对其父对象的位置是不变的,如下面两幅图所示 ,首先看上面这幅图,注意bu ...

  8. (转) Qt 出现“undefined reference to `vtable for”原因总结

    由于Qt本身实现的机制所限,我们在使用Qt制作某些软件程序的时候,会遇到各种各样这样那样的问题,而且很多是很难,或者根本找不到原因的,即使解决了问题,如果有人问你为什么,你只能回答--不知道. 今天我 ...

  9. qt中ui的 使用介绍

    1.什么是ui?ui通常是用Qt 设计师设计出来的界面文件的后缀.通常情况下ui是一个指向这个界面类的指针.ui-> 一般就是用来访问这个界面类里面的控件.例如你的ui文件里有一个叫okButt ...

  10. Qt 开启鼠标跟踪,自动激活mouseMoveEvent的问题

    最近在Qt上实现一个功能,鼠标在图片上移动,触发mouseMoveEvent事件,进而生成一个小的半透明窗口,放大显示以鼠标为中心的一个区域的图像并随鼠标移动.但是,必须鼠标摁下,才触发mouseMo ...

随机推荐

  1. [转帖]9.1 TiDB HTAP 的特点

    HTAP 是 Hybrid Transactional / Analytical Processing 的缩写.这个词汇在 2014 年由 Gartner 提出.传统意义上,数据库往往专为交易或者分析 ...

  2. [转帖]Kafka需要知道的一些基础知识点

    https://blog.csdn.net/daima_caigou/article/details/109101405 前言 kafka是常用MQ的一种,站在使用者的角度来看待,kafka以及所有的 ...

  3. [转帖] Linux命令拾遗-查看系统信息

    https://www.cnblogs.com/codelogs/p/16060714.html 简介# 作为一名程序员,有时需要关注自己的进程运行在什么样的软硬件环境里,比如几核cpu.固态硬盘还是 ...

  4. [转帖]jumpserver 添加Windows主机

    jump server添加 Windows主机资产 添加Linux主机资产步骤我们可以参照 链接:jump server添加Linux主机资产 进行操作. 一.资产管理-资产列表-创建资产 IP根据自 ...

  5. [转帖]配置logback上报日志到Skywalking

    https://zhuanlan.zhihu.com/p/506119895 配置logback上报日志到Skywalking 配置logback上报日志到skywalking需要引入toolkit依 ...

  6. Docker镜像的基本操作总结

    摘要 容器化是上个十年比较火的技术. 现在看起来在进行总计有点晚了. 不过linux是三十年前的,我依旧没有总结好 道理是一样的. 技术不在于新旧, 重要的是学习到原理. Docker的重要概念 Re ...

  7. Nginx 发布 Docker 运行日志的方法

    背景 公司这边想进行容器化负载均衡部署. 脚本很简单, 已经实现了, 但是发现我这边没有ELK也没有LOKI 又不太像切入到容器内部进行 获取日志信息. 所以我这边想了一个别的招来动态刷新日志. 思路 ...

  8. 基于go-restful实现的PoW算力池模型

    最开始知道区块链是在17年初,当时因为项目压力不大,开始研究比特币源码.对于比特币中提到的Proof of Work,当时只是一眼带过,并没有详细查看过相关的代码.在最近的项目中,考虑到性能的要求,需 ...

  9. STM32CubeMX教程27 SDIO - 读写SD卡

    1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 ...

  10. 树状数组(区间修改&&区间查询)

    #include<bits/stdc++.h> #define int long long using namespace std; int n,m,x,x1,y,z; int a[100 ...