VS+QT 工程中导入自定义控件

对于C++程序员来说,做一个漂亮的界亮程序通常都比较痛苦,QT相对于MFC来说是一种非常好的选择,尤其是QT被Digia公司收购以后,接连升级了多个版本,逐步兼容Windows、Linux、Mac OS、iOS和Android平台,很好。

在Windows平台使用Qt常用的方法有两种,一种是VS+插件的方法,另一种是使用Qt提供的Creator程序(需要安装C++编译器和调试器),笔者在工作中两种方式都用过,比较喜欢第二种,从认同感上讲各方面都喜欢Qt,排斥微软。但今天要说的问题是在使用第一种方法时遇到的。

当我们觉得Qt自带的控件Ui不能满足需求时,可以用C++强大的继承方式自己改造、创造控件。这里提醒大家,为了提高代码的重用性,创建自定义控件时不要先用QtDesigner绘制好控件再去改写它的类,而是要直接创建一个继承自Qt控件的类,界面元素通过代码创建。当然,在我说这些之前你可能不知道这些,用错误的方法创建了一个控件,现在你想在另外一个工程里重用它,有两种情景,我们一步一步来解决。

第一种情况:通过Qt Designer 创建控件后,还在上面放置了界面元素(文本框、安钮等),并且你还要用到这些元素。这种情况比较复杂,操作步骤为:

  1. 将 test.ui, test.h, test.cpp 一并拷到新工程,并在工程资源管理器里添加,这时候如果直接生成会提示“error LNK2019: 无法解析的外部符号”之类找不到函数实现之类的总问题;
  2. 右键点击test.ui选择属性->常规,将“从生成中排除”改为“否”,“项类型”改为“自定义生成工具”,然后修改“自定义生成工具”中的选项(可参工程内其它ui文件);
  3. 右键点击test.ui选择编译,然后手动将生成的“ui_test.h”添加进工程(Generated Files),对!就是这么二,所以我不喜欢微软;
  4. 右键点击test.h,参数步骤2,修改参数后编译,然后参考步骤3手动将生成的moc_test.cpp添加进工程;

第二种情况:通过Qt Designer 创建控件后并未在上面放置任何界面元素(比如就是一个空窗体,其它需要用到时时是通过代码创建的),这种情况稍简单些。操作步骤为:

  1. 将 test.h, test.cpp 一并拷到新工程,并在工程资源管理器里添加,打开test.h和test.cpp,去除其中有关ui_test.h及成员变量ui的相用(这样处理后,这个控件就变成干净的了,下次复用就不用这么麻烦了);
  2. 后续步骤参考情况一的步骤4即可。

 

发布者

发表评论

电子邮件地址不会被公开。