vs开发Qt项目会遇到的常见问题

不能向QDockWidget拖入控件

在这里插入图片描述
在vs中打开ui文件,通过Qt Designer查看ui文件可以发现,QDockWidget下没有其他控件。因为QDockWidget是容器控件,不能直接拖入子控件,必须通过中间 QWidget承载布局。
解决方法:使用文本编辑器打开ui文件,往里面添加 <widget class="QWidget" name="dockWidgetContents"/>
修改后的ui文件如下所示:
在这里插入图片描述
然后再用Qt Designer打开ui文件,可以看到已经成功往QDockWidget中添加了QWidget,可以往QWidget中拖入控件。
请添加图片描述

向.ui文件添加控件后,vs语法检测没有更新

解决方法:

  1. 首先要保存.ui文件
  2. 右键.ui文件,点击编译 请添加图片描述
  3. 右键项目,重新扫描解决方案
    请添加图片描述
    参考链接:VS写Qt项目时,ui界面拖拽的控件代码找不到引用的解决办法

新建了继承自QDialog的类,点击确认按钮后界面没有反应

这与第一部分的不能向QDockWidget拖入控件的情况类似,都是因为使用vs开发Qt项目的时候,即使是使用了Qt Visual Studio Tools插件 开发,在很多时候,vs也不支持Qt Designer的默认行为(第一部分中如果是使用Qt Designer创建QDockWidget就不会出现这种情况,因为它默认为我们在QDockWidget中创建了QtWidget)。
Qt Designer中创建QDialog类,它已经链接好了信号与槽,这时我们不需要再添加额外的代码,点击确认或是取消按钮后,窗口就会自动关闭,并发送执行reject()或是accept()槽函数。

请添加图片描述
但是,当我们在vs中创建QDialog类,vs的qt插件是不会自动地为我们链接信号与槽。

在这里插入图片描述
解决方法: 在创建QDialog类的构造函数中手动地连接信号与槽。

	QObject::connect(ui->buttonBox, &QDialogButtonBox::rejected, this,  &CreateExpDialog::reject);
	QObject::connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &CreateExpDialog::accept);

信号与槽的重复连接和自动连接

QObject::connect(sender, signal, const receiver, method, Qt::ConnectionType)如果进行了重复连接,那么当信号到来时,槽函数就会被重复执行,要想只连接一次ConnectionType应设置成Qt::SingleShotConnection(Qt6)Qt::UniqueConnection。而QObject::disconnect(sender, signal, receiver, method)只要一次就能将多次连接过的信号与槽断开。

void on_<object_name>_<signal name>(<signal parameters>);符合此命名规范的函数将会自动地连接信号与槽。这就可能会出现问题:Qt自动生成关联的槽函数,然后自己又用代码手动connect了一次,导致重复绑定。

自己总结的这十多年做Qt开发以来的经验 243

在头文件中使用类的提前声明而不是直接将类所在的头文件包含进来

减少编译依赖

当修改一个头文件的时候,所有直接或者间接#include它的源文件都需要重新编译。如果头文件中仅用了类的指针/引用(不需要知道类的大小或者成员),应使用类的提前声明。

解决循环依赖问题

两个类相互引用时,#include会导致循环依赖。

Qt子类对象必须和父类对象处在同一个线程

将自定义的类加入到qt的对象树管理中

class A : public QObject, public QGraphicsItem{	//如果是多继承,QObject的继承顺序是第一个
    Q_OBJECT
}

vs中出现C4828

在网页中复制代码粘贴到vs中就会出现此警告The file contains a character starting at offset 0x1a9 that is illegal in the current source character set (codepage 65001).当出现中文字符的时候还会报错。出现此问题的文件编码格式都是ANSI

VS的 Additional Include Directories 与 Include Directories

构造函数初始化列表的顺序不能决定对象中成员的初始化顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值