如何将Qt Designer 产生的*.UI文件转换成QT可以使用的*.H和*.CPP

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将Qt Designer 产生的*.UI文件转换成QT可以使用的*.H和*.CPP相关的知识,希望对你有一定的参考价值。

搜到的:
把UIC.exe和你要转换的xxx.ui文件拷贝到同一目录。
开始菜单,运行CMD
进入uic.exe和xxx.ui的目录,运行以下命令:
uic xxx.ui -o xxx.h 生成.h文件
uic xxx.ui -i xxx.h -o xxx.cpp 生成.cpp文件
生成头文件没问题,但在生成cpp文件时,给了这么个提示(如图),并且没有生成.cpp文件!

我是在qt designer中设计的ui,项目是在vs2010里创建的..
PS:为什么vs不能自动调用qt的uic编译ui自动生成.h 和.cpp呢?我已经nmake了呀,几个小时搞了等于没搞嘛!

呵呵呵呵.....
同学你对Qt不熟吧.ui 文件是不会生成.cpp文件的.ui文件就会生成一个ui_***.h文件.
有了这个ui_***.h文件就足够了.里面已经包含了所有的布局信息.

要用这个布局文件.你就要新建另一个 ***.h和***.cpp.然后在 ***.h中添加 ui_***.h.
并利用ui_***.h 定义一个变量叫ui.
在***.cpp中.使用 ui->setupUI();这就完成了添加布局信息的过程了.

要注意的是新建的类必须和ui中的基础类一致. 比如ui中的布局基于QDialog 你就不可以新建一个继承于QMainWindow的类来添加ui中的布局信息..追问

嗯~刚上手
你说Qt会根据ui文件自动生成一个ui_***.h文件,我没有看到啊,难道指的是我自己用uic编译得到的.h文件么?
另外,还有一最大的疑问:
我知道VS的c++编译器和Qt的不同,我想这也就是网上那么多人说装了vs add-in,还要重新configure、nmake Qt安装包,从而使得VS可以编译qt程序,对吧?!那么都这么做了,为什么还要用uic来编译ui生成.h呢,那如果新建的页面多了,或者修改了ui,岂不是要重新编译和改很多代码?

追答

要知道你那个 uic 编译得到的.h文件是不是就是包含布局信息的头文件很容易,你只需要打开它看看里面有没有你刚刚拖拽进Qt Designer 的控件和 setupUi() 这个函数就ok了.

对于 VS 配合 Qt 库的编码应该如何做不好意思我没办法帮你解答, 我用的是 Qt Designer + Qt Creator. Qt Creator 会自己管理uic 每次ui有改变就自动去修改布局文件.h. 但是缺点就是编译速度非常慢...

参考技术A 进入uic.exe和xxx.ui的目录,运行以下命令:

uic xxx.ui -o xxx.h 生成.h文件

uic xxx.ui -i xxx.h -o xxx.cpp 生成.cpp文件

QT通过 QT designer 可以生成 ui文件

  1. .生成方式:QT通过 QT designer 可以生成 ui文件  (.ui  && .ui.h)

  2. 2.UI文件内容: 以XML方式记录了QT designer生成的界面的相关内容,大体可以分为如下内容


  3. widget属性,其内容(图形元素, layout。。)的相关属性

  4. 头文件     

  5. 变量

  6. 槽 


  7. 函数

  8. 3. 通过UIC  (user interface compiler)可以把UI文件内容翻译成标准.h, .cpp文件

  9. uic使用方法:


  10. 生成声明(.h)文件:    uic [options] <file>  


  11. uic  [options] -subdecl <classname> <headerfile> <file>生成实现(.cpp)文件:uic [options] -impl <headerfile> <file>

  12. uic  [options] -subimpl <classname> <headerfile> <file选项:


  13. -o file - write output to ‘file‘ rather than to stdout. 

  14. -nofwd - omit forward declarations of custom classes in the generated header file. This is necessary if typedef classes are used. 

  15. -tr func - use func(sourceText, comment) rather than trUtf8(sourceText, comment) for internationalization. 

  16. 4.使用: (IN Makefile)


  17.     %.h: %.ui        uic $< -o [email protected]    %.cpp: %.ui        uic -impl $*.h $< -o [email protected]注:

  18. .ui.h 文件包含ui文件功能实现部分(slot,function,include,variable)

  19. 更改.ui.h文件后(如:加入一个槽),可能.ui文件没有做自动改变,这样会导致编译失败,需手动更改.ui文件

  20. QT 的Makefile会根据.ui文件生成相应源代码,而不是.ui.h文件


  21. 5.更改 .ui文件中的中文(.ui文件中中文为utf8, vi中显示不正常)

  22.     iconv  -f utf8 -t gbk  input.ui > output.ui.gbk

  23.     vi  output.ui.gbk

  24.     iconv  -f gbk -t utf8 output.ui.gbk > input.ui


以上是关于如何将Qt Designer 产生的*.UI文件转换成QT可以使用的*.H和*.CPP的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Qt Designer 中使用来自 Qt Designer 的 .ui 文件作为自定义小部件?

pyqt5通过qt designer 设计方式连接多个UI图形界面

QT通过 QT designer 可以生成 ui文件

Qt Designer - 只生成一个带有多个小部件的 .ui 文件

qt 关于使用qt designer创建的控件和代码中添加的控件有啥区别??

如何将qt designer中dialog的边框消失