0

是否有任何开源项目可以在 QT4 中构建可重用的 GUI 组件,并将额外的连接信息保存在 JSON 文件中?Qt 设计器允许您构建一个对话框并将信号和插槽连接在一起并将结果保存为 UI 文件。我正在寻找一个可以扩展它以构建组件的项目,您可以轻松地将其插入到 c++ 或 pyside 应用程序中。一个例子是为电影播放器​​构建一个播放控件,其中包含所有的开始、停止、倒带、快进按钮。然后在应用程序中,您只需加载 UI 文件或可能带有额外输入和输出的 JSON 文件以进行回调。

4

1 回答 1

0

leeg,你所说的用 JSON 做的事情相当广泛。我必须同意 Stefan 的评论,即将您的自定义小部件建模为 QWidget 的子类是正确的方法。

您可以轻松地将类放入任何 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 回答