如何使用qt -c ++从另一个cpp文件中的main.cpp调用实例化的类

时间:2017-07-18 15:12:10

标签: c++ qt singleton instance

我的 modBusSHARED 变量是我在某个类.cpp中需要的变量。

何时我想在没有重新实例的情况下从main.cpp中调用它们? 也许我需要一个单身人士?在qt中有一个方法,我从main调用class而没有构建单例?

我使用的是Qt 5.9。

Iterator a= listA.iterator();
Iterator b= listB.iterator();
    while(a.hasNext()){
        while(b.hasNext()){
            if(String.valueOf(a.next()).split(",")[1].equals(String.valueOf(b.next()).split(",")[0])){
                    listC.add(String.valueOf(a.next()).replaceAll("tf", String.valueOf(b.next()).split(",")[1]));
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

这个我的例子

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);
}