QT问题

chenfengwu 2009-06-04 09:49:35
关于Qt Designer 和代码生成的关系的理解上存在一些疑问,特向大家请教
按照我的理解代码生成过程如下:
1 先通过Qt Designer编辑,生成 .ui文件,该文件中包含了窗体的基本信息;
2 通过uic,根据.ui文件生成定义窗口的代码;
3 通过moc工具生成相关代码

我用了一下别人开发的控件,代码生成的过程中,信息传递的过程存在一些疑问

用Qt Designer的属性编辑器编辑完控件的属性后,若不改变控件的默认属性,生成的.ui文件中只包含了控件的几何形状等基本信息。若改变其默认属性,生成的.ui文件则包含其相关属性的信息,再用uic生成对应窗体的代码时,代码中包含了设置控件属性相关代码。现有疑问如下:
1 uic是如何知道设置控件相关属性所用的方法,是不是在编写控件时设置属性的方法名必须遵守相应的规范?看生成的代码里用的都是set+属性名,不知道是不是这个规范,方法的参数有没有什么规范?不知道在哪里可以找到相关资料。
2 设置属性时如何做逻辑检查,比如我要实现一个自定义控件,在属性编辑器中编辑控件某属性的范围时,若要能够保证属性的最小值比最大值小,控件该如何实现?
...全文
517 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
feith004 2009-07-17
  • 打赏
  • 举报
回复
没用过QT designer ,我想下个试试,居然找不到,哪位有网址告诉下啊·谢谢了
yhf365 2009-07-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 feith004 的回复:]
没用过QT designer ,我想下个试试,居然找不到,哪位有网址告诉下啊·谢谢了
[/Quote]
www.qtsoftware.com/download
找Qt-creator,
下载,安装,就OK了。
zhouxingyu896 2009-06-09
  • 打赏
  • 举报
回复
学习
学习
evoleci 2009-06-09
  • 打赏
  • 举报
回复
还没有用过Qt designer ,觉得自己动手会方便一些,调起来心里也有底,帮顶下
chenfengwu 2009-06-05
  • 打赏
  • 举报
回复
研究了一下,对自定义的控件的理解发表一下个人看法,不一定准确,大家交流,有问题请指出

1 自定义控件需要实现该控件的类以及QdesignerCustomWidgetInterface接口,QdesignerCustomWidgetInterface接口将自定义控件的信息提供给Qt Designer。编译后生成动态库以及该动态库的导入库,动态库包含了控件及接口的所有代码,导入库为控件使用者提供访问动态库的接口。

2 实现QdesignerCustomWidgetInterface接口的方法,在Qt Designer中编辑自定义控件时,通过QdesignerCustomWidgetInterface接口获取控件信息进行编辑,如通过createWidget方法创建控件(在编辑窗口中显示),通过domXml方法获取控件父类的相关属性的信息(如在属性编辑器中显示属于Qobject,Qwidget类的相关属性),通过includeFile()方法获取控件头文件信息等等。

3 实现自定义控件类时,在控件类的头文件中通过Q_PROPERTY宏声明需要在属性编辑器中编辑的控件属性,以声明testPropery属性为例:
Q_PROPERTY(int testPropery READ testPropery WRITE settestPropery RESET resettestPropery)
声明了”testPropery”属性及读取、设置、重置该属性的方法,但该声明与通常C语言中的声明存在差别,它主要用于向QT的元对象系统提供信息,可以通过QObject类的如下方法访问”testPropery”属性
QVariant QObject::property (const char *name) const
bool QObject::setProperty (const char *name, const QVariant & value)
在自定义控件的类中还需要定义一个用来表示”testPropery”属性的变量,以及实现testPropery ,settestPropery及resettestPropery方法。Qt Designer 一般通过默认的property sheet获取由Q_PROPERTY宏定义的控件属性,也可以通过继承QdesignerPropertySheetExtension类实现定制的property sheet extensions来操作属性编辑器。

4 在设置属性的方法中(如上述settestPropery方法),可以通过加入属性值逻辑关系判断来控制属性设置的逻辑有效性。通过属性编辑器编辑属性时,需要调用控件的相应设置属性的方法,若设置的属性值非法将被屏蔽。属性编辑器中显示的属性值应该是通过控件获取属性值的相关方法获得的。

5 编辑结束后保存,Qt Designer生成包含窗体信息的.ui文件,再由uic生成对应的代码。当某属性设置为默认值时(不修改),.ui文件中不包含设置该属性的信息,产生的代码中也不包含设置该属性的代码,控件创建时设置默认属性。

6 总结:用户实现自定义控件时需要该控件的类以及QdesignerCustomWidgetInterface接口,控件类实现控件的基本功能,设置、读取属性的方法等。Qt Designer通过QdesignerCustomWidgetInterface接口对控件进行编辑,如拖一个控件到窗口时通过接口创建相应的控件,设置控件属性时调用控件相关的设置和读取属性的方法,属性编辑器中显示的是通过读取属性值的方法获取的。
  • 打赏
  • 举报
回复
Designer的的界面信息会在qmake的时候映射到ui文件里,ui文件生成一个namespace Ui 的空间,里面有界面控件信息的类。

你的任何类如class usr,可以继承Ui::界面信息类,然后在此类的构造函数里显式的setupUi(this);就可以加载到Designer里的内容了。
rzsheng 2009-06-04
  • 打赏
  • 举报
回复
我不建议使用 QT Designer,
很不好用,不如自己写代码效率高。

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧