QT 的Moc Uic Rcc有什么用(360ui移植到eclipse)

Moc 主要是用于 将类中包含Q_OBJECT 的类里面的 信号 和槽 处理 成moc_xxx文件。

因为QT 信号与 slot 这一部分不是纯C++的 所以要通过 moc来将 Q_OBJECT的部分包含的信息编译进去。

当不使用信号这些的时候 去掉Q_OBJECT  也可以编译通过。只是无法处理信号这些。




Rcc 主要是将 rc资源文件 转成字节流形式 的CPP文件,所有的资源都可以通过这个文件获取得到。



Uic Uic主要是将 界面设计ui文件转换成 ui_xxx 其实也就是将设计的ui转成成C代码

比如 

<width>600</width>
<height>400</height 这种  

变成 xxx.setwidth(600) setHeight(400);

当我们不想要使用qt designer的时候。可以自己直接代码实现这些。这样更有助于理解。

1 自己实现   在构造函数里面实现所有。你需要删除它构造的 include "ui_xxx.h"

删除他的private:: Ui::xxxClass ui;




2 由QT来生成 他会在你的当前类里面自动添加一个ui_xxx.h

这个ui_xxx包含一个 xxxClass类。里面有一个setui函数。这个函数替你实现了 xxx.setwidth(600) setHeight(400);

当前类里面有一个 xxxClass的private对象






结合还有一篇eclipse上不使用QT IDE的编译。移植。


移植代码来自于

http://blog.csdn.net/liang19890820

╰☆奋斗ing❤孩子`

可以搜到他的360ui下载


将所有的代码添加到 eclipse设置好环境以后 编译(所有的.h和.cpp)不包括resources.h和resource.rc这两个是windows上面的

出问题

QtDemo/Debug/../about_us.cpp:5: undefined reference to `vtable for AboutUsDialog'


主要是由于这些类使用了 Q_OBJECT 需要moc的扩展。

先尝试解决 AboutUsDialog的问题。

调用QTDIR目录BIN的Moc处理这些cpp


export PREIN=/xxx/QtDemo
export PREOUT=/xxx/QtDemo/Out


./moc $PREIN/about_us.h  -o $PREOUT/moc_about_us.cpp
./moc $PREIN/account_item.h -o $PREOUT/moc_account_item.cpp
./moc $PREIN/change_skin_widget.h -o  $PREOUT/moc_change_skin_widget.cpp
./moc $PREIN/character_widget.h  -o $PREOUT/moc_character_widget.cpp
./moc $PREIN/clabel.h  -o $PREOUT/moc_clabel.cpp
./moc $PREIN/content_widget.h -o  $PREOUT/moc_content_widget.cpp
./moc $PREIN/drop_shadow_widget.h -o $PREOUT/moc_drop_shadow_widget.cpp
./moc $PREIN/kill_mummy_widget.h -o $PREOUT/moc_kill_mummy_widget.cpp
./moc $PREIN/loading_widget.h -o $PREOUT/moc_loading_widget.cpp
./moc $PREIN/login_dialog.h -o $PREOUT/moc_login_dialog.cpp
./moc $PREIN/main_menu.h -o $PREOUT/moc_main_menu.cpp
./moc $PREIN/main_widget.h -o $PREOUT/moc_main_widget.cpp




./moc $PREIN/msg_box.h -o $PREOUT/moc_msg_box.cpp
./moc $PREIN/push_button.h -o $PREOUT/moc_push_button.cpp
./moc $PREIN/register_widget.h -o $PREOUT/moc_register_widget.cpp
./moc $PREIN/setting_dialog.h -o $PREOUT/moc_setting_dialog.cpp
./moc $PREIN/shadow_widget.h -o $PREOUT/moc_shadow_widget.cpp
./moc $PREIN/skin_widget.h -o $PREOUT/moc_skin_widget.cpp
./moc $PREIN/system_tray.h -o $PREOUT/moc_system_tray.cpp
./moc $PREIN/title_widget.h -o $PREOUT/moc_title_widget.cpp




然后把产生的moc_xxx.cpp放入目录中 编译。

这时候编译已经可以通过了。这是运行结果。没有资源的样子


QT 的Moc Uic Rcc有什么用(360ui移植到eclipse)_第1张图片


由于我们没有设计ui 而是直接写的。所以这里uic不需要使用。


接下来转换资源Resource文件

把360safe.qrc转成二进制的cpp流


./rcc /xxx/QtDemo/Resources/360safe.qrc -o /xxx/QtDemo/360resorce.cpp


把这个cpp包含进去


编译执行

QT 的Moc Uic Rcc有什么用(360ui移植到eclipse)_第2张图片


你可能感兴趣的:(C语言,qt)