c++ - QT代码的组织

标签 c++ qt code-organization

我正在编写一个中等大小的应用程序。我会有很多 gui 组件和很多类。但是,我很难组织代码、分离逻辑……例如,假设我按下一个创建类对象的按钮并对该对象执行计算。退出按钮的槽函数后,这个局部对象就被销毁了。如果我以后在另一个函数中需要它怎么办?在头文件中将所有内容定义为全局变量对我来说不是一件好事。所以我在考虑一个静态类,它以某种方式包含指向我稍后需要的所有对象的指针。有人有更好的主意吗?

最佳答案

如何在应用程序内部管理对象总是一个棘手的问题 问题。 Qt 沿用了非常面向对象的路线并使用引用 几乎所有内容都通过指针实现语义。到 避免繁琐的手动内存管理 Qt 将所有内容组织成 Object Trees .这 由Qt自己扩充 object model这增加了 一些动态功能。

如果您想走那条路,请坚持使用 Qt 提供的一切。它 与通常的 C++ 方法相比,它更类似于 Java,并且可能是 对初学者来说更舒适,也许适合您的应用 领域。它将您的代码与 Qt 紧密联系在一起,并且很难 与它分开。

另一种方法意味着简单地放弃所有 Qt 的东西并计算出 应用程序的核心逻辑。用纯 C++ 开发它,然后有一个 将此逻辑连接到您的 Qt 应用程序中的薄层 信号和槽。在这种方法中,您会选择使用更多 值语义。

创建算法并保留它的具体示例 大约。 Qt 方法:

class MyAlgo : public QObject {
  Q_OBJECT
public:
    MyAlgo(QObject* o) : QObject(o) { }

    virtual compute();
};

// use it in a mainwindow slot

void MainWindow::executeAlgorithm(const QString& name) {
   MyAlgo* algo = this->findChild<MyAlgo*>(name);
   if(!algo) {
     // not found, create
     algo = new MyAlgo(this); // make mainwindow the parent of this algo
     algo->setName(name); // QObject name property
   }

   algo->compute();
}

关于c++ - QT代码的组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11846771/

相关文章:

c++ - 遍历 2D 矩阵的可并行算法,同时了解 col/row-wise 邻域

javascript - 从 Qt 调用 Javascript 函数不显示输出

C 数据结构 - 存储二叉树的表示

c++ - 在代码中放置#includes 和冗余的位置(头文件和实现文件)

c++ - 纸牌游戏中的结构 vector 之后不显示纸牌,不确定是否甚至创建了牌组

c++ - 使用 0xFFFFFFFF 是一种可靠的方法来设置 32 位类型的所有位吗?

使用多个 .pri 文件的 Qt MOC 文件名冲突

php - 如何组织您的 Controller 以获得最佳结构 (MVC)

c++ - 如何在不选择文件的情况下判断 QFileDialog 是否已关闭?

c++ - 内存泄漏(OpenCV + QML)