• 7324阅读
  • 10回复

实现ui的功能到底是利用多重继承还是放置一个ui成员啊? [复制链接]

上一主题 下一主题
离线eralvc
 

只看楼主 倒序阅读 楼主  发表于: 2008-10-11
— 本帖被 XChinux 执行加亮操作(2008-10-11) —
《C++ GUI Qt 4》一书里,对于实现已设计好的Ui,实现其功能是使用了多重继承,例如gotocelldialog的例子:
#include ""
#include “ui_gotocelldialog.h”
class GoToCellDialog  : public QDialog, public Ui::GoToCellDialog
{
    Q_OBJECT
public:
....

但是在Qt4自带的example里,基本都是将ui作为一个成员变量这样来实现的,例如books这个例子中bookwindow.h的例子:
#include <QtGui>
#include <QtSql>

#include "ui_bookwindow.h"

class BookWindow: public QMainWindow
{
    Q_OBJECT
public:
    BookWindow();

private:
    Ui::BookWindow ui;
...

两种方法有什么区别,谁优谁劣呢,有没有哪位能给出个解释?
离线chai2010

只看该作者 1楼 发表于: 2008-10-11
引用楼主eralvc于2008-10-11 10:25发表的 实现ui的功能到底是利用多重继承还是放置一个ui成员啊? :
《C++ GUI Qt 4》一书里,对于实现已设计好的Ui,实现其功能是使用了多重继承,例如gotocelldialog的例子:
#include ""
#include “ui_gotocelldialog.h”
class GoToCellDialog  : public QDialog, public Ui::GoToCellDialog
{
.......


我比较喜欢对应一个ui成员,这样可以ui中的元素和class中的分离出来。
如 ui.pushButton。
离线eralvc

只看该作者 2楼 发表于: 2008-10-11
哦,不知道哪个更合乎编程规范些?
离线XChinux

只看该作者 3楼 发表于: 2008-10-11
都可以。
个人喜欢多重继承。至于命名,有自己的规则就行。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线yfx2003

只看该作者 4楼 发表于: 2008-10-11
俺喜欢成员法……
www.qtcn.org/gpq4/
ajaxref.okajax.com/
离线eralvc

只看该作者 5楼 发表于: 2008-10-11
我看有人说这是个C++继承与组合的问题,什么意思?
离线XChinux

只看该作者 6楼 发表于: 2008-10-11
使用ui成员就是组合。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线cuis2324

只看该作者 7楼 发表于: 2008-10-12
这个应该看习惯吧,都可以,不过类要是多的话那就继承组合已一起用
离线jinnsky

只看该作者 8楼 发表于: 2008-10-12
使用多继承的话,子类可以扩展父类,比如在父类的基础上添加新的部件:
class MyForm : public QWidget, public Ui_Form {
    Q_OBJECT
private:
    QLabel* label; //可以把这个label加到Ui_Form里,因为MyForm本身就是一个Ui_Form
    ...
};
所以从扩展性的角度来看,推荐使用多继承的方式~
追求卓越 JinnSky
离线eralvc

只看该作者 9楼 发表于: 2008-10-12
是啊,我倒是没有想过如果将ui作为一个成员的话,想要再添加部件的话会怎样。不过应该会在Qdesigner里重新设计ui吧
离线75543255

只看该作者 10楼 发表于: 2009-08-30
为什么官方不用继承,反而用成员变量呢
快速回复
限100 字节
 
上一个 下一个