2012-09-27 58 views
0

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

+0

出了什么问题'QWidget'子? –

回答

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(); 
} 
+0

感谢您的回复,但我所要求的更多的是关于这个部分>在调用对象中,您可以将插槽连接到每个相应的信号。 <我正在寻找一种像gui组件一样通过保存插槽和信号的连接来创建插件的方法。 – leeg

+0

虽然你所说的在理论上是可行的,但完成需要花费很多时间和精力。您需要使用词法分析器并编写自己的解析器,或者使用像QJson这样的库并解析JSON。但是,您仍然需要想出一种方法来解释这些JSON文件,并根据JSON定义动态创建插槽/信号。从本质上讲,这种方法会带来很多开销。理论上可以完成,但我不会推荐它。 –