1

私はQProgressBarを使用していますが、この手順でロジック レイヤーの特定のクラスから進行状況を送信する方法を既に理解しています。

  • ビューレイヤークラスで接続を設定します。
  • ロジック層クラスで信号信号を作成します。
  • QObjectになるようにロジックレイヤークラスを変更します。
  • ロジック層の基本クラス クラス コンストラクターとして QObject を呼び出します。

ここで、ロジック層の特定のクラスが別のクラスを介して進行状況を送信するようにします。

例えば:

  1. クラス A (view-layer 内): クラス B で進行状況の接続を作成します。
  2. クラス B (ロジック層): クラス C で進行状況の接続を作成します。
  3. クラス C: クラス A (view-layer) で表示できるように進行状況を更新します。

クラスBからCへの接続と信号を使用するためにこの手順を模倣しようとしましたが、うまくいかないようです。

どんな答えでも大歓迎です

4

3 に答える 3

1

ロジック レイヤーと UI レイヤーの間にサービス レイヤーという中間レイヤーを作成し、インターフェイス クラスを配置して 2 つのレイヤーを接続します。このサービス レイヤーの基本は、UI からメッセージを受け取り、ロジック レイヤーから何を期待するかを知ることです。次に、サービス層がメッセージをロジック層に送信し、ロジック層から期待されるクラスの仮想実装を作成できます。具体的な実装に記入し、UI レイヤーに戻します。これはちょっと混乱するかもしれませんが、それはそうだからです。これは、n 層アプリケーションまたはその他の名前のホストとして参照される大きなトピックですが、実際にはデザイン パターンに関する優れた本は、c++ のインターフェイスを必要とするプロジェクトで作業するのに役立つでしょう。しかし、C# などの別の言語で適用される設計パターンを通じて、アイデアを抽象化することは常に可能です。これが少し役に立てば幸いです。申し訳ありませんが、入力して表示できるものではありませんが、一時的な信号スロットメカニズムの問題を処理するよりも、何をしようとしているのかをよく理解する方がはるかに有益だと思います. さらにコードを提供していただければ、現在の状況を診断できるかもしれません。

于 2013-02-14T04:06:25.673 に答える
1

SIGNAL/SIGNAL 接続を使用して、互換性のある署名を持つシグナルを転送できます。以下のコード サンプルで重要な部分は、LogicClass1 のコンストラクターの接続です。

// My other logic class
class LogicClass1 : public QObject
{   Q_OBJECT
public:
    LogicClass1(LogicClass2* lc2)
        : lc2(lc2)
    {
        connect(lc2, SIGNAL(signalPrograssIteration(int)), 
                this, SIGNAL(signalPrograssIteration(int)));
    }

signals:
    void signalPrograssIteration(int);

private:
    LogicClass2 *lc2;
};

// My other logic class
class LogicClass2 : public QObject
{   Q_OBJECT
public:
    LogicClass2(){}

signals:
    void signalPrograssIteration(int);

private:
    void doSomething();
};

// the function that actually does stuff
void LogicClass2::doSomthing()
{
    int val = 0;
    for(...)
    {
        .
        .
        emit signalPrograssIteration(val);
        .
        .
    }
}

QObject::connectのドキュメントで同様の例を見ることができます。

于 2013-02-15T01:49:02.330 に答える