1

私はミドルサイズの申請書を書いています。多くの GUI コンポーネントと多くのクラスを用意します。ただし、コードを整理したり、ロジックを分離したりするのは難しいです... たとえば、クラスのオブジェクトを作成するボタンを1つ押して、そのオブジェクトに対して計算を実行するとします。ボタンのスロット機能を終了すると、このローカル オブジェクトは破棄されます。後で別の関数で必要になった場合はどうすればよいですか? ヘッダー ファイルですべてをグローバル変数として定義することは、私にとっては良いことではありません。そこで、後で必要になるすべてのオブジェクトへのポインターを含む静的クラスを考えていました。誰かがより良いアイデアを持っていますか?

4

1 に答える 1

2

アプリケーション内のオブジェクトをどのように管理するかは、常に難しい問題です。Qt は非常にオブジェクト指向のルートをたどり、ほとんどすべてに対してポインターを介して実装された参照セマンティクスを使用します。面倒な手動メモリ管理を避けるために、Qt はすべてを Object Treesに編成します。これは、いくつかの動的機能を追加する Qt 独自の オブジェクト モデルによって強化されます。

そのルートをたどりたい場合は、Qt が提供するすべてのものに固執してください。これは、通常の C++ アプローチよりも Java にはるかに似ており、初心者にとってより快適であり、アプリケーション ドメインに適している可能性があります。コードを Qt にしっかりと結び付け、コードを分離するのが難しくなります。

もう 1 つのアプローチは、すべての 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();
}
于 2012-08-08T07:44:19.740 に答える