一、Qt 类中Q_OBJECT的作用

QObject 是所有Qt对象的基类。

QObject 是Qt模块的核心。它的最主要特征是关于对象间无缝通信的机制:信号与槽。使用connect()建立信号到槽的连接,使用disconnect()销毁连接,使用blockSignals()暂时阻塞信号以避免无限通知循环,使用connectNotify()和disconnectNotify()追踪连接。

宏Q_OBJECT是任何实现信号、槽或属性的强制性要求。不管是否需要实现这些机制,都要求使用这个宏。否则会引发一些函数的奇怪行为。

二、加入q_object编译不过问题解决

如果一个项目开始没有用Q_OBJECT,后来因为业务需求加入Q_OBJECT,在该类头文件中加了#include<QObject>,再让该类继承QObject,加上Q_OBJECT宏来支持信号与槽,这样会出现各种莫名其妙的错误
class  TOPIScanningLine : public QGraphicsItem,public QObject
{
Q_OBJECT
}

尝试着把Q_OBJECT宏给删掉
然后编译通过了,但是这样就不能使用信号与槽机制
解决方法:

QObject继承要写在第一个,不然Q_OBJECT就不起作用,所以将继承放在第一位,例如
class  TOPIScanningLine :public QObject, public QGraphicsItem
{
Q_OBJECT
}

这样就能成功编译。

三、emit的使用

假设现在定义了一个类A,现在想在A的一个函数void A::function1()当中的结尾处emit一个信号signal1(),然后利用这个信号触发另一个类B进行某项操作void B::function2(),connect应该如何书写

比如在一个QMainwindow中,包含类A,B的头文件,是的类A,和类B可见,定义一个类A *a,和一个类B *b,(要分配空间)。就可以这么connect他们。
connect(a,SIGNAL(signal1()),b,SLOT(function2())); 
对于A,B两个类出来都必须继承于QObject类。

代码:

//类A头文件  要有Signals
signals://鼠标移动信号
void mouseMoveSignal(); //鼠标移动 //类A 某函数释放信号
void TOPIScanningLine::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
emit mouseMoveSignal();//释放信号
QGraphicsItem::mouseMoveEvent(event);
} //类B头文件 需要有槽函数
public slots://槽函数
void GetDistanceUp();//更新上图距离 //类B 函数链接
TOPIPic_Up = new TOPIScanningLine();//一定要实例化
connect(TOPIPic_Up, SIGNAL(mouseMoveSignal()), this, SLOT(GetDistanceUp()));

四、QT绘制直线、矩形、圆

1.添加头文件

#include <QPainter>

2.重写paintEvent函数,代码如下:

void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setPen(QPen(Qt::blue,));//设置画笔形式
painter.drawLine(,,,);//画直线
painter.drawLine(,,,);
painter.drawEllipse(,,,);//画圆
painter.drawRect(,,,);//画矩形
}

3.函数需要在头文件中声明

protected:
void paintEvent(QPaintEvent *);

QT学习笔记3:QT中语法说明的更多相关文章

  1. 【Qt学习笔记】Qt+VS2010的配置

    http://blog.csdn.net/jocyln9026/article/details/8575218 关于Qt Qt是1991年由Trolltech公司开发的一个跨平台的C++图形用户界面应 ...

  2. Qt学习笔记:Qt中使用Lua

    今天想在Qt中使用Lua进行数据操作 结果发现在Qt中使用Lua的文章较少,虽然很简单,但是还是写出来提供入门,顺便记录一下 我使用的是Qt Creator 3.4.2,用的是mingw4.9.2的编 ...

  3. Qt学习笔记-嵌入式qt程序支持显示中文

    移植后得qt程序在开发板上运行时无法显示中文. 拷贝windows中的字体也不行. 从网上找到方法. 添加以下代码:需要头文件  #include <QTextCodec> QTextCo ...

  4. qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

    应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看执行效果,我用的群创7寸屏 ...

  5. Qt学习笔记-Widget布局管理

    Qt学习笔记4-Widget布局管理       以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,f ...

  6. QT学习笔记(一)——Helloworld

    QT学习笔记(一)--Helloworld 一.调试的基本方法: Log调试法 --在代码中加入一定的打印语句 --打印程序状态和关键变量的值 断点调试法: --在开发环境中的对应代码行加上断点 -- ...

  7. PyQt(Python+Qt)学习随笔:Qt Designer中部件的autoFillBackground属性

    autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景.使用的颜色由部件调色板中的QPalette.window 角色定义(关 ...

  8. PyQt(Python+Qt)学习随笔:Qt Designer中部件的accessibleDescription和accessibleName辅助阅读属性

    accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性(关于国际化请参考<PyQt(Python+Qt)学习随笔:Qt D ...

  9. PyQt(Python+Qt)学习随笔:Qt Designer中部件的toolTip、toolTipDuration、statusTip、whatsThis属性

    toolTip属性 toolTip属性设置部件的toolTip提示信息,toolTip提示信息在鼠标放到控件上会浮动出一个小框显示提示信息.默认情况下,仅显示活动窗口子部件的toolTip,可以通过在 ...

  10. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的按钮改变缺省文字的方法

    在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...

随机推荐

  1. pandas空值处理与插值

    # coding:utf-8 import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy.int ...

  2. vue、入门

    入门vue v-on:click:chang   绑定事件点击 生面周期,整个vue的执行过程,他的应用执行了生面周期,也就是执行过程,这个执行过程如下图表,我们可以参考下图,也可以访问官方网址:ht ...

  3. Mac 下 gzip 一个文件

    gzip -k xxx.json -k 会保留源文件

  4. python面向对象——类

    from:http://www.runoob.com/python3/python3-class.html Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在P ...

  5. kernel 3.10内核源码分析--TLB相关--TLB概念、flush、TLB lazy模式 【转】

    转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&id=4808877&uid=14528823 一.概念及基本原理 TLB ...

  6. jquery记忆笔记

    1.javascript需要注意的一些问题: ①不要使用==比较,始终坚持使用===比较. false == 0; // true false === 0; // false ②NaN这个特殊的Num ...

  7. FTRL算法

    稀疏解的作用:内存和时间啊 实际的互联网广告应用需要的是快速地进行model的更新.为了保证快速的更新,训练样本是一条一条地过来的,每来一个样本,model的参数对这个样本进行一次迭代,从而保证了mo ...

  8. 你真的了解js伪数组吗?深入js伪数组

    关于js伪数组 具有length属性: 按索引方式存储数据: 不具有数组的push().pop()等方法: 你可能知道怎么把伪数组转换为数组,但是你知道这里边的原理吗? 假如页面有一组li元素 < ...

  9. jmeter之数据库

    https://www.cnblogs.com/ShadowXie/p/6007515.html

  10. Fiddler 4 抓包(APP HTTPS )

    一.手机连接Fiddler 1.配置fiddler 1.安装fiddler,基本下一步下一步即可: 2.打开fiddler,点击顶部栏Tools——>Options 3.在HTTPS页签勾选“D ...