QT4开源项目构建可重用组件

时间:2012-09-27 15:41:56

标签: json qt user-interface qt4

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

1 个答案:

答案 0 :(得分: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();
}