可能的原因是在不同文件中没有保持相同的对象实例,A文件中定义ZipAPI zipAPI;
然后B文件又再次定义ZipAPI zipAPI;
解决方法:
1.单例模式
// zipapi.h
class ZipAPI {
public:
static ZipAPI* instance() {
static ZipAPI instance;
return &instance;
}
// 实现非静态信号
void emitLinesReady(const QStringList& lines)
{
emit linesReady(lines);
}
static QStringList outlist;
signals:
void linesReady(const QStringList& lines);
// 其他成员函数和信号槽声明
};
// zipapi.cpp
// 其他成员函数和信号槽的实现
ZipAPI::instance()->emitLinesReady(outlist);//通过单例模式调用
//mainwindow.cpp中信号连接zipapi中的对象
connect(ZipAPI::instance(),&ZipAPI::linesReady,this,&MainWindow::showinfo);
2.全局变量
// zipapi.h
extern ZipAPI globalZipAPI; // 声明全局变量
// zipapi.cpp
ZipAPI globalZipAPI; // 定义全局变量
// 其他文件中
#include "zipapi.h"
// 使用 globalZipAPI 对象实例进行信号和槽的连接和调用
3.传递对象实例
// file1.cpp
#include "zipapi.h"
void someFunction() {
ZipAPI zipAPI; // 创建对象实例
// 将 zipAPI 对象实例传递给其他函数或类
// 在其他函数或类中使用传递的 zipAPI 对象实例进行信号和槽的连接和调用
}
// file2.cpp
#include "zipapi.h"
void anotherFunction(ZipAPI& zipAPI) {
// 在这里使用传递的 zipAPI 对象实例进行信号和槽的连接和调用
}
无论使用哪种方法,都要确保在不同文件中使用的是同一个 ZipAPI 对象实例,这样才能保证信号和槽的连接和调用能够正常工作。