QT:常见的代码编写问题

目录

一、运行显示先后问题

问题概述:

举例:

解决方法:

解决思路:

二、软连接问题(库链接指向错误)

问题概述:

解决过程:

解决方法:

实用代码:


一、运行显示先后问题

问题概述:

简单来说就是运行代码后,是先显示ui,还是先执行函数。有些必须要先等ui显示出来后,才能调用函数传递参数。

举例:

在多层嵌套的管理里,如A界面的B控件提升为C、C与A中的D控件关联信号槽。写代码的时候,逻辑是C传递信号给A,在A中绑定C和D的信号槽。但在运行时有可能会闪退,原因是A在绑定C和D的信号时,D还没有显示,所以没有办法绑定并发送信号。

解决方法:

先让D显示出来,在执行后面的。

解决思路:

show();

/*执行一次事件循环提前初始化*/
QApplication::processEvents();

/*
* 后面执行需要执行函数
*/

二、软连接问题(库链接指向错误)

问题概述:

我在项目B代码的时候,复用了项目A代码(里面包含了一个对数据库处理的库,是其他前辈封装好的),我想这偷懒就直接拿来用了,然后我代码里使用这个库链接appStore.db,在qt上跑出来控制台显示的很正常,但是一打包放在云服务器上跑(服务器里已经跑了项目A,项目A链接的是script.db),运行出来的总是链接向了script.db,而且我加输出也一个没有显示。

解决过程:

一开始我想是不是因为项目A在服务器上跑着,所以项目B只能连向A链接的数据库,然后我把A项目kill了,但依旧还是指向script.db,而且我改了A的代码,把A指向appStore.db然后把执行文件打包在服务器上运行,结果也指向script.db!看起来就像这两个项目都指向了一个不知道在那里的库,然后这个库还不跟着我打包的版本变化(突破口啊!!家人们)。然后我就去看两个执行文件的库连接,发现两个项目的数据库链接都指向了/usr/local/lib里的libRoSqlite.so.1(!!!!!!就是这个)这个库是我根据我之前写一篇博客的方法一的第7点放进去的(就是这篇Qt+Ubuntu20.04:打包qt_ubuntu qt程序打包-CSDN博客,这个方法一就是个坑哇)然后就是libRoSqlite.so.1这个文件是项目A的RoSqlite.pro编译出来的,然后我复用的时候又偷懒没有给这个文件改名字(家人们不能偷懒啊!!!!!!)

解决方法:

最后是我把项目B的RoSqlite文件夹里所有的文件都重命名了(记得宏定义也要),改成了RoSqlite2(哈哈哈,又偷懒了)记得.pro的编译出来的库名称也要改。然后重写编译这个文件,这个时候本地的项目bin里编译出来的库名字就变了(原来的是这个)然后把重写编出来的项目B再打包安装到服务器上,下一步很重要,把安装进去的libRoSqlite2.so.1库放到/usr/local/lib里,这个时候再去看两个项目的软连接,就不是指向同一个了,编译也就正常了!

实用代码:

 ldd xxx(你的项目路径,例如/opt/appStore/AppStore,AppStore是我的项目可执行文件)

会显示你的项目链接的库,找到你出错的库,看链接到哪里去了

//移动库到指定位置
cp /opt/appStore/libRoSqlite2.so.1(填你自己的库位置) /usr/local/lib/


//因为我修改了/etc/ld.so.conf文件,将库链接指向了/usr/local/lib/,所以要用下面的命令使修改生效
ldconfig

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值