当前位置: 首页 > news >正文

《Qt应用开发》笔记p4

元对象编译器 MOC(Meta Object Complile)

Qt 的 .cpp程序和.h 程序可能或通过 MOC进行二次编译生成标准的C++程序,然后再有Makefile编程成可执行程序。

Qt 的信号和槽机制不是C++标准语法,他是基于Qt的元对象系统进行二次编译后才能够通过 编译器编译和使用。

Qt 元对象编译器的基础条件

  1. 类一定是QObject类派生出来的子类
  2. 类内必须包含 Q_OBJECT宏(通常写在类定义的第一行)
  3. 要安装Qt 的元对象编译器(在安装Qt时自动安装)。

使用元对象系统实现自定义的按钮

目标:使用 QWidget 实现自定的按钮功能:

mypushbutton.h

#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H#include <QWidget>class MyPushButton : public QWidget
{Q_OBJECT
public:explicit MyPushButton(QWidget *parent = nullptr);
protected:// 重写 paintEvent来覆盖父类的 paintEventvoid paintEvent(QPaintEvent *event) override;// 重写鼠标的按下和抬起的事件处理函数。void mousePressEvent(QMouseEvent *event) override;void mouseReleaseEvent(QMouseEvent *event) override;
private:bool mouse_is_down;  // 用来记下鼠标的状态。signals:void my_pressed();};#endif // MYPUSHBUTTON_H

mypushbutton.cpp

#include <QPainter>
#include <QDebug>#include "mypushbutton.h"MyPushButton::MyPushButton(QWidget *parent) : QWidget(parent), mouse_is_down(false)
{}void MyPushButton::paintEvent(QPaintEvent *event)
{
//    qDebug() << "paintEvent被调用";// 创建一个 绘图对象 QPainter,用来绘制此Widget的内容QPainter painter(this);// 填充整个窗口为蓝色,rect() 函数用来返回当前窗口的位置和大小。if (mouse_is_down) {
//        painter.fillRect(rect(), QColor(255,255,0, 128));painter.fillRect(rect(), Qt::red);
//        painter.drawEllipse(rect());} else {painter.fillRect(rect(), Qt::blue);}
}
void MyPushButton::mousePressEvent(QMouseEvent *event)
{mouse_is_down = true;// 强制调用paintEvent 来刷新窗口。update();// 提交 my_pressed 信号,调用关联的槽函数。emit my_pressed();
}
void MyPushButton::mouseReleaseEvent(QMouseEvent *event)
{mouse_is_down = false;update();
}

绘图事件 paintEvent

Qt 的 Widget每次在窗口需要刷新时都会调用 paintEvent事件来进行刷新界面。覆盖(override)此函数可以实现窗口的自定义绘图。

void QWidget::paintEvent(QPaintEvent *event)

Qt 网络编程

字符串QString 和字节数组 QByteArray

  • QString 字符串(存放文字)
  • QByteArray 字符数组(存放字节编码)
//将字符串转化成为 Utf8 编码的字节数组
QByteArray QString::toUtf8() const// 将字节数组 转为字符串 QString
QString QString::fromUtf8(const char *str, int size = -1)
// str 是执行字节数组的 缓冲区首地址, size 是内存长度。
// 或
QString QString::fromUtf8(const QByteArray & src);

QTcpSocket Tcp传输

常用的成员函数

// 构造函数
QTcpSocket(QObject *parent = nullptr);
// 连接到主机
void connectToHost();
// 发送数据包
write()、writeData()
// 接收数据包 
read() 、readData()、ReadAll();
//接收到数据产生的信号
readReady()
// 连接成功产生信号
connected()
// 断开连接产生信号
disconnected()

QUdpSocket Udp传输

常用的成员函数

// 构造函数
QUdpSocket(QObject *parent = nullptr);
// 发送数据包
writeDatagram()
// 接收数据包 
readDatagram()、receiveDatagram()
//接收到数据产生的信号
readReady()
http://www.dtcms.com/a/478977.html

相关文章:

  • 用 Matplotlib 实现数据可视化3 个案例实战
  • PS4资源汇总:PS4游戏18T+合集1700多个游戏+固件+主题+金手指+模拟器
  • 营销型网站设计价格app软件商店
  • 网站开发的工作环境wordpress没有链接
  • Spring Web MVC入门补充1
  • 反悔贪心 系列
  • 十二、OpenCV中的边缘检测
  • 个人网站 摄影展示wordpress神箭手
  • 天津网站建设icp备微建网站
  • 软考~系统规划与管理师考试——真题篇——章节——第20章 数字乡村发展规划——纯享题目版
  • 旅行商问题(TSP)(2)(heuristics.py)(TSP 的两种贪心启发式算法实现)
  • 网站设计需求方案wordpress转成中文版
  • 最佳经验网站网站有哪些布局
  • 爬虫的基本流程:从发送请求到数据清洗的完整链路
  • 大连手机自适应网站制作价格百度权重查询
  • 当地网站建设问卷调查建筑设计一般用什么软件
  • 淘宝商品详情 API 介绍
  • 【车机应用管理器 GUI:一款高效的 Android 车机应用与系统命令管理工具】
  • d41:MyBatisPlus入门,注解,配置,条件构造器,自定义SQL,IService
  • 沈阳网官方网站重庆男科医院哪家好
  • 无广技术贴!【PDF编辑器】Solid Converter PDF保姆级图文下载安装指南——实用推荐之PDF编辑软件
  • Fail2ban安装及配置教程:防止ECS暴力破解
  • 自做的网站如何发布松江建设新城有限公司网站
  • 住建城乡建设部网站网站建设空间主机的选择
  • 阿里美团京东从“三国杀”到“双雄会”:本地生活无限战争的终局猜想
  • wpf之Interaction.Triggers
  • 网站建设新的技术方案企业网站建设东莞
  • SSM管理系统c4ki9(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 珠海正规网站制作排名费用多少无锡阿凡达建设
  • asp网站建设 aws西安高校定制网站建设公司推荐