【问题标题】:How to call instantiated class from main.cpp in another cpp file with qt - c++如何使用 qt - c++ 从另一个 cpp 文件中的 main.cpp 调用实例化类
【发布时间】:2017-07-18 15:12:10
【问题描述】:

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

我想随时从 main.cpp 调用它们而无需重新实例? 也许我需要一个单身人士? qt中有一个方法,我从main调用类而不构建单例?

我使用的是 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(); 
}

【问题讨论】:

  • 您是否尝试将变量传递给类的构造函数或类的方法?
  • 是的,但是传递变量它不是我的目标......我的目标是当我想从 cpp 调用类时......也许唯一的解决方案是单例。
  • 假设您的班级是Car,而Car 需要Driver(来自main)。您在Car 中创建一个成员,它是对Driver 的引用。 Car 构造函数将有一个 Driver 引用作为参数。

标签: c++ qt singleton instance


【解决方案1】:

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

只需确保Classmain.cpp 中初始化之前不使用modbus

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-27
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多