VS2019 + Qt 5.12.3 报moc错误的可能解决方法之一

本文详细记录了解决VS2019结合Qt5.12.3环境下出现的moc错误的过程。通过调整代码结构,将QSqlDatabase指针的声明从slots部分移出,成功解决了编译错误,实现了父窗口与子窗口间数据库连接的传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VS2019 + Qt 5.12.3 报moc错误的可能解决方法之一

报错如图

原本目的

父窗口连接数据库,将QSqlDatabase 的地址传给 “登陆” 子窗口

部分代码

Father.h

#include "Login.h"
public:
	QSqlDatabase database;
	Login login;
	void InitDataBase();
signals:
	void SendSql(QSqlDatabase* pd);
public:
    //--- 其他代码

Father.cpp

Father::Father(QWidget *parent)
	: QMainWindow(parent)
{
	InitDataBase();
	connect(this, &Father::SendSql, &login, &Login::getSql);
	emit SendSql(&database);
	login.exec();
	ui.setupUi(this);
}

void Father::InitDataBase()
{
	database = QSqlDatabase::addDatabase("QMYSQL");  //驱动
	database.setHostName("localhost");          //数据库地址,一般都是本地,就填localhost就可以
	database.setDatabaseName("test");           //数据库名,根据你Mysql里面的数据库名称来填写,比如我Mysql里面有个数据库叫test,可以用Navicat软件看自己的数据库名字
	database.setUserName("root");               //用户名,一般是本地用户,就填root就可以
	database.setPassword("123456");             //密码,填写你自己的Mysql登陆密码
	//database.setPort(3306);                         //端口默认的是3306,可以不用写
	if (database.open())
	{
		QMessageBox::warning(this, QString::fromUtf8("提示"), QString::fromUtf8("打开成功!"), QMessageBox::Yes);
	}
	else
	{
		QMessageBox::warning(this, QString::fromUtf8("提示"), QString::fromUtf8("打开失败!"), QMessageBox::Yes);
	}
}

Login.h

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QMessageBox>
public slots:
	void getSql(QSqlDatabase*);
	QSqlDatabase* sql;      //记住这个地方

public:
    //--- 其他代码

Login.cpp

void Login::getSql(QSqlDatabase* psql)
{
	sql = psql;
	QMessageBox::warning(NULL, QString::fromUtf8("提示"), QString::fromUtf8("GOOD!"), QMessageBox::Yes);
}

解决过程

因为代码本来没多少东西,所以用Qt Creator重做了一份,然后。。。
在Login.h里

public slots:
	void getSql(QSqlDatabase*);
	QSqlDatabase* sql;      //这里编译后Qt Creator会报错,VS不报错
	//报“ Error: Not a signal or slot declaration ”错误
public:
    //--- 其他代码

然后改成

	QSqlDatabase* sql; 
public slots:
	void getSql(QSqlDatabase*);

public:
    //--- 其他代码

就没问题了

总结

slots: 后只跟待绑定的函数

本人只是小白,只因在学习过程中遇到了这个小问题,纠缠了两天,因感慨写下本文章。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值