首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于构建可重用组件的QT4开源项目

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

Stack Overflow用户
提问于 2012-09-27 23:41:56
回答 1查看 217关注 0票数 0

有没有开源项目可以在QT4中构建可重用的图形用户界面组件,并将额外的连接信息保存在JSON文件中?Qt设计器允许您构建一个对话框,将信号和插槽连接在一起,并将结果保存为UI文件。我正在寻找一个项目,将扩展这一点,以建立组件,你可以很容易地插入到一个c++或pyside应用程序。一个例子就是为一个电影播放器构建一个包含所有开始、停止、后退、快进按钮的播放控件。然后,在应用程序中,您只需加载UI文件或JSON文件,其中包含用于回调的额外输入和输出。

EN

回答 1

Stack Overflow用户

发布于 2012-10-02 12:46:26

leeg,你谈论的JSON是相当广泛的。我不得不同意Stefan的观点,将您的自定义小部件建模为QWidget的子类是正确的方法。

可以说,您可以很容易地将这些类插入到任何Qt GUI应用程序中。在创建标准Qt GUI库中尚未出现的新GUI元素时,我经常使用此技术。您可以设置布局(垂直和水平),然后在小部件中嵌套小部件,以设计行为复杂的小部件。从那里,您可以创建自定义插槽和信号来处理不同的事件。

例如,您提到了电影播放器的播放器控件,该控件具有开始、停止、后退和快进按钮。您需要创建一个包含小部件,然后向包含小部件添加一个水平布局。然后,您可以添加用于开始、停止、后退和快进的按钮。如果您想要按钮的图像,可以在按钮本身上设置按钮图像。然后,您可以发出开始、停止、倒带和快进的信号。在调用对象中,您可以将插槽连接到每个相应的信号。

这个框架应该会帮助你入门:

代码语言:javascript
复制
#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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12625115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档