Qt类声明中Q_OBJECT的作用与报错解决
2017-06-22 周四 大雨 北京 院里
新建作图类,继承自QCUstomPlot类
因为需要同时作8张图,都要单坐标缩放的功能,因此想干脆新建一个类,继承自QCUstomPlot,把需要的功能都加上。类名取为QCUstomPlotPlus,最终成功版类代码如下:
//声明。explicit是为了禁止隐式转换。
class QCustomPlotPlus : public QCustomPlot
{
Q_OBJECT //重要!
public:
explicit QCustomPlotPlus(QWidget *parent = 0);
private slots:
void mousePressFun();
void mouseWheelFun();
};
//函数定义
//构造函数:继承自QCustomPlot,所以用QCustomPlot(parent)。
QCustomPlotPlus::QCustomPlotPlus(QWidget *parent) :
QCustomPlot(parent)
{
//设置单坐标方向缩放和拖拽
bool t1 = connect(this, SIGNAL(mousePress(QMouseEvent*)), SLOT(mousePressFun()));
bool t2 = connect(this, SIGNAL(mouseWheel(QWheelEvent*)), SLOT(mouseWheelFun()));
}
//鼠标点击槽函数
void QCustomPlotPlus::mousePressFun()
{
// if an axis is selected, only allow the direction of that axis to be dragged
// if no axis is selected, both directions may be dragged
if (xAxis->selectedParts().testFlag(QCPAxis::spAxis))
axisRect()->setRangeDrag(xAxis->orientation());
else if (yAxis->selectedParts().testFlag(QCPAxis::spAxis))
axisRect()->setRangeDrag(yAxis->orientation());
else
axisRect()->setRangeDrag(Qt::Horizontal|Qt::Vertical);
}
//鼠标滚轮槽函数
void QCustomPlotPlus::mouseWheelFun()
{
// if an axis is selected, only allow the direction of that axis to be zoomed
// if no axis is selected, both directions may be zoomed
if (xAxis->selectedParts().testFlag(QCPAxis::spAxis))
axisRect()->setRangeZoom(xAxis->orientation());
else if (yAxis->selectedParts().testFlag(QCPAxis::spAxis))
axisRect()->setRangeZoom(yAxis->orientation());
else
axisRect()-> 大专栏 Qt类声明中Q_OBJECT的作用与报错解决;setRangeZoom(Qt::Horizontal|Qt::Vertical);
}
Qt类声明中Q_OBJECT的作用
一开始在类声明时,我没有加入Q_OBJECT这一句代码,结果信号和槽函数的连接总是不成功,无法实现单坐标缩放。
经过对比自动生成的类,我发现每一个类声明都有Q_OBJECT,因此百度了一下。原来只有加入Q_OBJECT之后,才能正常使用信号和槽机制,囧TT……
加入Q_OBJECT后报错的解决
在类声明中加入Q_OBJECT后,程序构建报错:
undefined reference to `vtable for QCustomPlotPlus'
没有办法,只好再百度,查到了这篇博文:Qt 出现“undefined reference to `vtable for”原因总结”。
在这篇文章里找到了解决方法:
问题:某一个类中如果加入Q_OBJECT后, 则link时提示:undefined reference to vtable for “xxx::xxx”.删掉它则没有任何问题.
解决:尝试(1):把所有的obj文件和uic文件删除,重新编译.仍然失败.去trolltech的 mail lists找到原因: 因为qmake生成Makefile的时候,这个类的头文件中并没有Q_OBJECT,所以在相应的Makefile里面并没有用moc xxx.h命令,最终导致链接失败.重新运行qmake,问题解决.在查找解决方法的时候,附带发现一点:
qmake 不会处理.cpp文件里的Q_OBJECT,所以,如果在.cpp文件中有它的话,也会产生undefined reference to vtable for “xxx::xxx”. 这时,需要先用moc xxxx.cpp生成相应的moc文件,再包含到.cpp里面去,才能解决这个问题.
按照博文说法,我重新运行了qmake,成功构建,功能正确!
具体qmake的作用是什么我还不太懂,有待后面继续学习!
Qt类声明中Q_OBJECT的作用与报错解决的更多相关文章
- linux下启动dbca或netmgr类的图形界面报错解决
linux下启动dbca或netmgr类的图形界面报错解决 Xlib: connection to ":0.0" refused by server Xlib: No pro ...
- 气死人不偿命,Q_OBJECT导致的C++报错,而且还看不明白(#ifdef没控制好,导致什么都不认识了)
为了代码可以同时适应VC++和MingW编译器,我改动了我的代码,变成: #ifdef _MSC_VER #pragma comment(lib, "crypt32.lib") / ...
- Visual Studio 下C#编译器在解析属性名时如果增加一个get_[您的另一个已经包含在类中属性名]的属性会报错,微软大哥这是什么鬼?
假设在在我们的vs环境新建一个类 copy以下代码,表面看好像一切都没有问题. using System; using System.Collections.Generic; using System ...
- 关于使用CodeFirst,修改类或上下文时操作数据库报错解决方法
在操作已经创建好的数据库时,若是添加新的实体类或者修改原有数据库上下文,会报如下错误: The model backing the 'StudentDbContext' context has cha ...
- Django | 模型类变更后生成迁移文件,报错:You are trying to add a non-nullable field 'BookName' to BookInfo without a default....
报错: You are trying to add a non-nullable field 'BookName' to BookInfo without a default; we can't do ...
- 类中调用界面ActiveX控件报错当前线程不在单线程单元中因此无法实例化 ActiveX 控件的解决办法
解决办法是Form类中定义一个静态的ActiveX对象,在formload中将界面上的ActiveX对象赋值给新定义的对象,类中访问该静态对象即可. public static AxClientDri ...
- SpringBoot高版本修改为低版本时测试类报错解决
有时在使用idea通过Spring Initailizr创建项目时,默认只能创建最近的版本的SpringBoot项目. 这是如果想要换成版本,就可以在项目创建好了之后,在pom文件中直接将版本修改过来 ...
- [Qt 踩坑] 设置背景就卡退 报错 异常结束或者crashed 0xFFFFFFFF
#开始 我现在是带着崩溃得心情写博客的 这个估计是我遇到的最混蛋的bug 我试图用Qt写个小程序 然后给窗口添加一个背景 就像这样 先不管我那个路径的问题 只要写了那个代码,就一定出错 删除了一点事情 ...
- SpringBoot环境下使用测试类注入Mapper接口报错解决
当我们在进行开发中难免会要用到测试类,而且测试类要注入Mapper接口,如果测试运行的时候包空指针异常,看看测试类上面的注解是否用对! 正常测试我们需要用到的注解有这些: @SpringBootTes ...
随机推荐
- Python学习中的随笔,好记性不如烂笔头
本文 为博主看了 vamei 的blog 写下的随笔 . 致敬Vamei 1.type() 可以显示参数的类型 如 : a=12 type(a) 为 int 2.python的基本类型 为 i ...
- Python 进行 OCR识别 -- pytesseract库
pip install pytesseract 报错:tesseract is not installed or it's not in your path 下载安装 Tesseract-OCR ht ...
- PHP 限制访问ip白名单
一 上代码 config.php //ip白名单配置 'ipWlist'=>[ 'ifFilter'=>true, //是否开启白名单功能 'wlist'=>[ '10.0.0.1 ...
- 0.3W微功率放大器
电路结构 电路摘自<晶体管电路设计(上)>. 电路采用+5V单电源供电,两级结构.Tr1构成共射极放大电路作为电压放大级:Tr3,Tr4构成推挽的射极跟随器作为输出级:Tr2作为射极跟随器 ...
- 遥测数据导出sql
SELECT (select codename from CD_BGStation where CodeValue=StationCode)as 监测点位,case when [DETECTIONST ...
- Pooled genome sequence strategies |representative genome assembly approaches|Domestication|GERP|selective sweep|Hybridization|Introgression|iHS|SNP genotyping arrays|haplotype
Design based on biology 通过比较基因组学的方法,将脊椎动物基因组的数据,解决生物学各方面问题.新的调控注释(在脊椎动物的进化过程中的出现的)可以丰富物种树(比如不同功能蛋白质进 ...
- 常见 Web 安全攻防总结
Web 安全的对于 Web 从业人员来说是一个非常重要的课题,所以在这里总结一下 Web 相关的安全攻防知识,希望以后不要再踩雷,也希望对看到这篇文章的同学有所帮助.今天这边文章主要的内容就是分析几种 ...
- 爬虫笔记(十四)——BeautifulSoup库
Beautifulsoup库: 该库是python语言写的,主要功能是将html.xml格式的数据对象解析成"标签树",并进行遍历和维护,即可以从网页抓取数据. 借鉴的html是妹 ...
- Zabbix常用监控项整理
zabbix常用key:http://blog.51cto.com/ttxsgoto/1771752 linux主机cpu使用率超过90%的时候报警:https://blog.csdn.net/reb ...
- Linux常用指令(三)
进入京东运维组实习,收到了很多同事的热心指导,自己也努力学习,按照他们给出的学习计划,真的很充实,学到了很多不只是开发方面的知识. 以下简单记录下自己的笔记,方便以后查阅. 1.文件系统 Linux系 ...