0

JSONファイルに保存された追加の接続情報を使用してQT4で再利用可能なGUIコンポーネントを構築するためのオープンソースプロジェクトはありますか?Qt Designerを使用すると、ダイアログを作成して信号とスロットを接続し、結果をUIファイルとして保存できます。これを拡張して、c++またはpysideアプリケーションに簡単にプラグインできるコンポーネントを構築するプロジェクトを探しています。例としては、すべての開始、停止、巻き戻し、早送りボタンを備えた映画プレーヤーのプレイコントロールを作成することです。次に、アプリケーションで、UIファイルまたはコールバック用の追加の入力と出力を含むJSONファイルをロードするだけです。

4

1 に答える 1

0

leeg さん、あなたが JSON で行うことについて話していることはかなり広範です。QWidget のサブクラスとしてカスタム ウィジェットをモデル化することが正しいアプローチであるという Stefan のコメントに同意する必要があります。

いわば、Qt GUI アプリケーションにクラスを簡単にドロップできます。私は、標準の Qt GUI ライブラリにまだ存在しない新しい GUI 要素を作成するときに、この手法を頻繁に使用します。レイアウト (垂直および水平) を設定し、ウィジェットにウィジェットをネストして、複雑に動作するウィジェットを設計できます。そこから、さまざまなイベントを処理するためのカスタム スロットとシグナルを作成できます。

たとえば、開始、停止、巻き戻し、早送りボタンを備えたムービー プレーヤーのプレーヤー コントロールについて言及しました。包含ウィジェットを作成してから、包含ウィジェットに水平レイアウトを追加する必要があります。次に、開始、停止、巻き戻し、早送りのボタンを追加できます。ボタンの画像が必要な場合は、ボタン自体にボタン画像を設定できます。次に、開始、停止、巻き戻し、早送りの信号を送信できます。呼び出し元のオブジェクトで、スロットをそれぞれのシグナルに接続します。

このスケルトンは、開始するのに役立ちます。

#include <QtCore>
#include <QtGui>

class PlayerControl : public QWidget
{
    Q_OBJECT
    signals:
        void start();
        void stop();
        void rewind();
        void fastForward();

    private slots:
        void startClicked();
        void stopClicked();
        void rewindClicked();
        void fastForwardClicked();

    public:
        PlayerControl(QWidget *parent);
        ~PlayerControl();

    private:
        QPushButton startButton;
        QPushButton stopButton;
        QPushButton rewindButton;
        QPushButton fastForwardButton;
}

void PlayerControl::PlayerControl(QWidget *parent)
{
    // do setup here
    connect(startButton, SIGNAL(clicked()), this, SLOT(startClicked()));
    connect(stopButton, SIGNAL(clicked()), this, SLOT(stopClicked()));
    connect(rewindButton, SIGNAL(clicked()), this, SLOT(rewindClicked()));
    connect(fastForwardButton, SIGNAL(clicked()), this, SLOT(fastForwardClicked()));
}

void PlayerControl::~PlayerControl()
{
    // clean up
}

void PlayerControl::startClicked()
{
    emit start();
}

void PlayerControl::stopClicked()
{
    emit stop();
}

void PlayerControl::rewindClicked()
{
    emit rewind();
}

void PlayerControl::fastForwardClicked()
{
    emit fastForward();
}
于 2012-10-02T04:46:26.243 に答える