qt的moc,uic,rcc命令的使用
qt是一个c++的界面库,其特点就是其源码可以跨平台编译,这样在写自己的小工具时可以方便地在windows,mac或linux环境下移植了。在windows下写c++程序当然选vs,在mac下写程序当然用xcode,在linux下就完全控制台吧。
本人仅仅将其看成是一个c++的库,所以不想学习新的的IDE--qt creator,也不想去学qt designer,所以qt的预处理都需要自己用命令来折腾。
Moc
从qt继承而来的类只要用了关键字 Q_OBJECT,都必须生成其对应的moc文件,命令如下
moc.exe myclass.h -o mac_myclass.cpp
其中myclass.h中有类有Q_OBJECT属性。在vs项目中只需要添加mac_myclass.cpp文件即可。
UI
虽然不使用designer来设计界面,但在编译一个demo项目时都会用*.ui文件,这时得先将其用uic.exe进行转化
uic.exe app.ui -o ui_app.h
其中app.ui是用designer设计好的界面文件, ui_app.h是生成的头文件。然后在c++项目中#include "ui_app.h"即可。
资源
qt定义了一套它自己的资源使用方式,其资源定义文件形如*.qrc。

如图ras.qrc文件其实就是一个xml文件,其中就包含了ras文件夹中的一些png文件。
用如下的命令可以将ras.qrc文件转化成cpp代码:
rcc.exe -no-compress ras.qrc -o ras.cpp
这样在vs项目中添加ras.cpp文件后,就可以用如下的路径来使用资源。
QIcon icon_app(":/ras/app.png");
大致地看一下ras.cpp的代码,可以发现qt应该是将图像的像素点转化成c++字节数组进行存储。
perl代码批量转化
上面说的这些命令,如果只是一个小项目,还可以去手动输入一个个命令,如果是一个大项目,那如果手动的话就简单是恶梦了。下面本人用perl实现了自动转化功能。
use 5.010;
use warnings;
use strict; sub main;
sub HaveQObject;
sub ui;
sub moc;
sub ras; main; sub main
{
say "\n**********moc**********";
moc; say "\n**********ui**********";
ui; say "\n**********ras**********";
ras;
} #将ui转化为.h文件
sub ui
{
while (<*.ui>) {
my @fs = split /\./, $_;
my $h_file = "ui_$fs[0].h";
system("uic $_ -o $h_file"); say "create $h_file";
}
} #将有元信息的.h文件生成对应的.cpp文件
sub moc
{
while (<*.h>) {
my $f = $_;
if (HaveQObject($_)) {
my @fs = split /\./, $f;
my $c_file = "moc_$fs[0].cpp";
system("moc.exe $f -o $c_file"); say "create $c_file";
}
}
} sub HaveQObject
{
my $filename = $_[];
open FILE, $filename;
while (<FILE>) {
chomp;
s/^\s+//;
s/\s+$//;
if ("Q_OBJECT" eq $_) {
return ;
}
}
return ;
} #将资源生成对应.h文件
sub ras
{
while (<*.qrc>) {
my $s = substr($_, , rindex($_, "."));
my $c = "ras_$s.cpp";
system("rcc -no-compress $_ -o $c");
say $c;
}
}
qt.pl
其中moc函数,在先判断如果某个.h文件中包括有Q_OBJECT则执行moc,
ui函数对*.ui文件进行转化生成对应的*.h文件
ras函数对*.qrc文件进行转化生成对应的*.cpp文件
去掉命令行窗口
一般c++的主函数是int main(int argc, char **argv),这里生成的exe在运行时会带一个命令行窗口,在完成最终的产品时实现将其去掉。可以这样在vs中进行设置:
"链接器-系统-子系统"中选择Windows
"链接器-高级-入口点"设置为mainCRTStartup
这样就去掉了命令行窗口
qt的moc,uic,rcc命令的使用的更多相关文章
- QT之uic、moc、rcc命令生成相应的cpp文件
1.rcc 生成qrc.cpp文件 2.uic生成ui_*.h,moc生成moc_*.cpp文件
- QT uic rcc moc 命令行使用
QT uic rcc moc 命令行使用 PS C:\Users\lsgx> uic.exe --help Usage: C:\Qt\Qt5.5.1\5.5\msvc2012\bin\uic.e ...
- qt中moc的作用
Qt 将源代码交给标准 C++ 编译器,如 gcc 之前,需要事先将这些扩展的语法去除掉.完成这一操作的就是 moc. moc 全称是 Meta-Object Compiler,也就是"元对 ...
- Why Does Qt Use Moc for Signals and Slots(QT官方的解释:GUI可以是动态的)
GUIs are Dynamic C++ is a standarized, powerful and elaborate general-purpose language. It's the onl ...
- Qt笔记——MOC(莫克)
moc 代表 Meta-Object Compiler,"元对象编译器".Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件. 假设它发如今一个头文件里包括 ...
- Qt 中用QProcess调用cmd命令
项目做到一定阶段,常常须要在原来的project上调用外部程序. Qt为此提供了QProcess类,QProcess可用于完毕启动外部程序,并与之交互通信. 基本用法: QProcess p(0); ...
- Qt Resource System Qt资源体系(qrc rcc)
Qt资源体系采用平台独立机制来存储应用程序执行时的二进制文件.这种机制在应用程序需要一些确定的文件(图标.翻译文件等等)而且又不想冒丢失文件的风险时是有用的. 资源体系依赖于 qmake, rcc ( ...
- Verdigris: Qt without moc
https://woboq.com/blog/verdigris-qt-without-moc.html https://github.com/woboq/verdigris
- qt之窗口换肤(一个qss的坑:当类属性发现变化时需要重置qss,使用rcc资源文件)
1.相关文章 Qt 资源系统qt的moc,uic,rcc命令的使用 2.概要 毕业两年了,一直使用的是qt界面库来开发程序,使用过vs08.10.13等开发工具,并安装了qt的插件,最近在做客户 ...
随机推荐
- Elasticsearch学习之入门2
关于Elasticsearch的几个概念: 1)在Elasticsearch中,文档归属于类型type,而类型归属于索引index,为了方便理解,可以把它们与传统关系型数据库做类比: Relation ...
- Appium学习笔记(一)--安装与配置
移动自动化测试常用工具有两个:Appium和Robotium.正好最近自己开始负责客户端的工作,初来乍到需要熟悉下环境,正好学习新的东西. 移动自动化相对web来说,原理与操作过程是一样的,通过自动化 ...
- nodejs入门 SSH服务器远程部署nodejs
最近刚刚接了一个项目我也是个nodejs的初级的人 从开始吧 建立服务器 用什么ssh工具我就不说了 这个界面大家都熟悉吧 点击下面的 All download options wget http: ...
- SQLAutoCode - error when attempting to generate schema
I'm trying to auto generate a schema for use in SQLalchemy, I'm using sqlautocode to do this, I use ...
- 纠结attr(),prop()
刚刚看博客无意中看到attr()和prop()的区别,回头就去翻了一下手册,感觉手册上写的过于简单,不能很清晰的分辨出两者的区别,两者的参数用法都是高度相似. attr():设置或返回被选元素的属性值 ...
- 采用OLEDB数据库方式向指定的Excel添加数据,怪像!
我们都知道,对Excel进行操作,其实方法是多种多样的,例如采用Office.Interop;例如采用ASPCell:例如采用NPOI:再例如采用数据库连接的方式OLEDB,etc. 还是先说说背景吧 ...
- 关于string,我今天科普的
今天下午朋友讨论组上讨论一个关于string的问题,问题是这样的,string a="aaa";string b=a;a="bbb",为什么测试b的值不改变?之 ...
- HTML5新增标签及具体用法
html5自从推广普及以来,迅速被各大浏览器支持.采用html5设计的网页逐渐成为网页设计的时尚.下面就温习下html5的新增标签. HTML 5 中的新特性包括了嵌入音频.视频和图形的功能,客户端数 ...
- 将十六进制的字符串转化为UIImage
最近写一个项目,有验证码,但是接口返回的并不是验证码图片的URL,而是返回的字节数组16进制字符串.这样就需要把16进制字符串首先字节数组,其次再把字节数组转化为NSData,最后再把NSData转化 ...
- 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试
Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...