如何使用qt调用另一个cpp文件中的main.cpp中的实例化类--C++
问题描述:
我的modBusSHARED变量是一个变量,我将在某些类中使用.cpp。如何使用qt调用另一个cpp文件中的main.cpp中的实例化类--C++
何随时从main.cpp调用它们,而不需要重新实例吗? 也许我需要一个单身?在qt中有一种方法,我从main调用class而不用构建singleton?
我正在使用Qt 5.9。
int main(int argc, char *argv[]) {
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
ModbusMasterMobile modBusSHARED;
bool test = modBusSHARED.connectWIFITCP("xxx.xxxx.xxxx.xxxx", 1234, 3000);
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
答
您可以使用您的static ModbusMasterMobile * modbus;
其他类被创建后它尽快初始化为&modBusSHARED
。
然后,您将有权从其他类的所有实例访问该对象。
拥有一个单例是为了防止意外创建多次该类型的实例。但是你的情况并不适合单身人士,你所需要做的只是不创建更多的对象实例。一旦你初始化了静态指针,它就会指向那个实例。
// in Class.h
class Class {
public:
static ModbusMasterMobile * modbus; // now you can use modbus inside Class
// ... other stuff
};
// in Class.cpp
ModbusMasterMobile * Class::modbus = 0;
// in main.cpp
ModbusMasterMobile modBusSHARED;
Class::modbus = &modbus; // initialize it
// from this point on Class can use modbus
只要确保Class
不使用modbus
之前在main.cpp
被初始化。
答
这个
我的例子
static QMutex mainMutex;
...
MainController* MainController::s_instance = NULL;
...
MainController* MainController::getInstance()
{
if(!s_instance){
QMutexLocker lock(&mainMutex);
if(!s_instance){
s_instance = new MainController;
}
}
return s_instance;
}
int MainController::exec(int argc, char *argv[])
{
QApplication a(argc, argv);
initializeControllers();
initializeSplashScreen();
initializeLoginScreen();
startCommunicationToServer();
return a.exec();
}
int main(int argc, char *argv[])
{
return MainController::getInstance()->exec(argc,argv);
}
你试过传递变量要么你的类的构造函数或类的方法呢? –
是的,但通过变量它不是我的目标...我的目标是调用类,当我想从CP ...也许独特的解决方案是单身。 –
假设你的班级是Car,而Car需要一个Driver(来自'main')。您在'Car'中创建一个成员,该成员是对'Driver'的引用。 'Car'构造函数将有一个'Driver'参数作为参数。 –