• 5093阅读
  • 3回复

[提问]qt designer 使用的一些问题。。 [复制链接]

上一主题 下一主题
离线wlcl
 
只看楼主 倒序阅读 楼主  发表于: 2011-12-05
问题描述:
1、已经使用qt designer 设计出来了一个ui(designer.ui)。那么,这个会通过moc生成ui_designer.h文件。
2、自己新建一个类mydesigner,在designer.h当中定义。mydesigner继承自那个ui类。
问题:
在定义mydesigner类的时候,有两种方式:
1、class mydesigner::public QMainWindow,public Ui::dedigner
{
............
};


2、namespace Ui {
    class mydesigner;
}
class mydesigner : public QMainWindow
{
public:
...
private:
Ui::mydesigner *ui;
...
private slots:
...
};
1、这两种方式,有什么区别
2、第一种方式,我比较容易理解:既就是,mydesigner类将designer类继承下来。然后,在mydesigner类当中可以有限制的使用designer当中的一些成员和方法。至于,第二种方法,不知道,为何引入了名字空间,这个有点大概的知识,还请详解!!


谢谢!
离线wlcl
只看该作者 1楼 发表于: 2011-12-05
自己在别人解答的基础之上,还是有疑问:
Ui::mydesigner *ui;这里的ui是mydesigner类的指针,而mydesigner类并不是继承自那个ui类。为什么就可以通过ui->...来访问那个ui类当中的成员和方法?

例如:在ui生成的那个类当中会有这样一个函数:setupUi()用来进行初始化。可是,我为什么可以通过Ui::mydesigner *ui; 这个ui->setupUi()来访问之??
离线XChinux

只看该作者 2楼 发表于: 2011-12-06
你看下那个生成的ui_xxx.h文件里的内容就都明白了。前面那个是类前置声明,如果不声明你就要包含头文件了,这样的话你.ui文件一变化,头文件就得重新编译了,所有引用了该头文件的文件也要重新编译。所以推荐使用第二种指针形式的
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线yiyangzhi111
只看该作者 3楼 发表于: 2011-12-06
1、class mydesigner::public QMainWindow,public Ui::designer
{
............
};

这种是多继承的方式,但是必须要包含ui_designer.h头文件,具体参照C++中的多继承。
而ui_designer.h是uic自动生成的,可以打开看看里面的内容。
2、namespace Ui {
    class mydesigner;
}
class mydesigner : public QMainWindow
{
public:
...
private:
Ui::mydesigner *ui;
...
private slots:
...
};
这种方式中:
namespace Ui {
    class mydesigner;
}
是前置声明,是为了Ui::mydesigner *ui而写的,至于为什么你在cpp里能调用ui->setup()是因为你的cpp里引用了ui_designer.h,而Ui::mydesigner的定义就在ui_designer.h中,setup()也定义在ui_designer中,ui是一个指针。推荐用第二种方式,原因楼上说的很明白。
快速回复
限100 字节
 
上一个 下一个