Qt项目中出现的问题小结

Qt项目中出现的问题小结

  写在前面: 总结这个星期自学Qt踩过的一些坑,并不包含所有问题,仅仅是基于自己所做的小界面而言

1. Qt中文乱码

描述:

Qt项目文件中中文乱码?qDebug()打印的中文乱码?

解决方法:

  1. 如果是Qt Creator

     

    直接点这个,

在这里插入图片描述

然后会出来:

在这里插入图片描述

选择utf-8编码即可。

 

  1. 如果是VS + Qt(拓展)

    在使用中文字符的地方加上:#pragma execution_character_set("utf-8")即可

 

2. 关于Qt调用vs编译的dll控件

个人建议:如果有这个需求,就不要用仅凭Qt Creator进行开发了,不是Qt Creator不行,我相信网上面肯定有很多方案用Qt Creator调用dll控件,但是我认为,这时候使用vs + qt(拓展)是最好的,否则,运气不好会遇到很多版本问题。

  如果你在Qt Creator中隐式调用dll出现一些奇怪的报错,请考虑以下两点:

  1. 头文件路径包含是否正确
  2. Qt Creator不行就换vs+qt(拓展)

 

3. 关于动态链接库导出类与函数的使用
  1. 函数:网上一大堆我之前总结过=>

  2. 类:重点是对导出类的使用

    只需要包含类所在的头文件即可直接使用,不需要任何其他操作!

    如果包含了该类头文件后,运行出错,请考虑文件的路径问题。

 

4. 关于动态链接库隐式调用的两种操作

方法一:

  1. 把* .lib或者 *.a文件和 *.dll文件和xxx.h文件复制到当前项目目录下(非必要)

  2. 点击项目->属性->链接器->常规->附加库目录:输入* .dll和* .lib目录,然后

    在项目->属性->链接器->输入->附加依赖库: 添加* .dll

方法二:

  1. 把* .lib或者 *.a文件和 *.dll文件和xxx.h文件复制到当前项目目录下(非必要)

  2. 先在使用dll的源文件中地方加上:#pragma commet("lib ", "lib的路径")

    然后在项目->属性->链接器->输入->附加依赖库: 添加* .dll

 

5. VS+Qt(拓展)打不开xxx.ui文件

解决方法:

右键点击xxx.ui文件,选择打开方式,将原先的默认方式取消,将另一个qt design(改一下名字,比如把中间的空格除去得到qtdesign)设为新默认。

 

6. 关于自定义控件的提升

简单控件:用一个类即可,xxx* h和 xxx* cpp实现

复杂组合控件: 用一个qt设计师(qt creator)/qt类(vs+qt), xxx* h, xxx* cpp, xxx* ui

点击任意一个ui文件并编辑,右键->提升的窗口部件,就能看到哪些已经被提升了,然后选择基类,将类名xxx填入,点击全局包含,全局包含点开后,在其他ui地方就可以用这个提升了。

 

关于取消提升,只有当前项目所有文件都不依赖该提升类时,才可以将其删除,删除方式与添加相似,打开那个界面之后,选择之前提升的类,点击减号(这时候减号是亮起来的,并显示未被使用)

 

7. 关于按钮形状、颜色的设定

使用stylesheet编辑样式表

 

8. 子窗口的移动问题

无论是:我这个小窗口,怎么不是嵌入在主窗口里面?明明加了弹簧,怎么鼠标还可以动?加了setparent啊?还是: 我这个窗口怎么才能随着鼠标拖动啊?

 

就是就一个问题:鼠标点击事件的设置mousexxxEvent的重写,能被拖动就看看这个,肯定是重写了这个事件,不能随鼠标拖动,就加上这个事件的重写。

 

9. 关于封装而引起的事件响应问题

比如一个自定义按钮类,他是通过重写鼠标的监听即重写mousexxxEvent来实现贴图的切换,点一下:贴图变成"开", 再点一下贴图变成"关",这样的话,把这个按钮做一个提升,假设继承的基类为QPushButton,那么用connect连接点击信号,和一个槽函数,那么,可以告诉你的是,你点击鼠标,显示的开关贴图会变,没问题,但是槽函数不会执行!!!因为贴图挡住了,这个点击信号被你自己重写的mousexxxEvent函数给捕捉了,所以即便是自定义按钮继承的QPushButton类,里面有clicked这个信号,也不会被触发!

 

解决方法:移除自己重写鼠标的监听即mousexxxEvent,将这个捕捉鼠标点击信号的任务让出来,然后connect鼠标点击信号(QPushButton继承下来的) 和 新建槽函数(内容为原来mousexxxEvent中的内容即可),然后都可以通过这个一个捕捉信号来,比如转换开关的贴图,以及开关对应的功能。

 

10. 关于Qt的绘图问题

主要学习QPainter类,顺带学习QPen、QColor、QBrush等等类

  1. 画出图形draw系列:

画点、线、弧、图、扇

  1. 画笔Qpen系列:

画笔调控:粗细、颜色、实虚线

  1. totate旋转、translate移位…

  2. 绘图的坐标系

  3. 数学计算…

 

11. 关于Qt定时器的使用
QTimer *time = new QTimer;//实例化计时器
connect(time, &QTimer::timeout,[=](){
//........ 计时器一到设置的时间就触发信号,开始做某事
});
time->setInterval(600);//设置计时器为600ms,每600ms触发一次
time->start();//开始计时

 

12. 我对于Qt的一点看法

Qt是一个与c++搭配默契的GUI图形库,除了基本的图形界面外,还可以用于网络通信,也可以用于操作数据库,甚至拓展Opencv图像处理,值得大家一学。别的语言搞图形化界面我不太清楚, 但是对于c/c++,这类语言来说,反正比easyx强太多了!


THE END…

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值