一、资源下载地址

https://www.aliyundrive.com/s/jBU2wBS8poH

本项目路径:项目->免费->QtDev

注释:为了方便qt全功能开发,QtDev中包含了qt所有的Win32和x64的Release及Debug库。如果开发简单功能的话可以只下载对应所需要的库即可。

二、项目介绍

1、从零开始开发一个小项目,通过本项目来介绍Qt界面简易开发的过程及原理,简易开发的意思是只需要对应的Qt库及编译工具(如vs2019)即可。电脑不需要安装Qt Creator,vs2019不需要安装Qt插件。本文使用vs2019来描述其原理,根据原理其他平台下如Linux也可以进行简易开发。

2、本项目完成的功能及解决的常见问题如下:

(1)、Qt生成的exe添加logo。

(2)、Qt加载资源来使用ico,png图标。

(3)、Qt加载资源失败的原因及解决方案,尤其是双击文件使用exe打开时资源加载失败导致图标无法显示。

(4)、Qt中文乱码的原因及解决方案。

(5)、软件发布的两种形式:免安装包和安装包。

三、项目开始

1、准备工作

(1)、电脑安装vs2019

(2)、Qt库下载

最简单的界面程序开发需要如下文件:

2、vs2019新建一个空白解决方案

3、创建一个控制台应用项目

4、创建一个基础函数模块,封装编码转换等一些基础功能

源码:

新建工程:

在解决方案下新建一个core文件夹,然后右击core新建空白项目:

然后把源码拖到工程里:

然后设置项目输出目录及项目设置为静态库:

然后设置附加包含目录:

然后设置预处理器:

最后右击生成该项目:

5、创建Qt界面模块

源码:

GuiQtDev.ui:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>GuiQtDevClass</class>
<widget class="QMainWindow" name="GuiQtDevClass">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>400</height>
</rect>
</property>
<property name="windowTitle">
<string>Gui</string>
</property>
<widget class="QWidget" name="centralWidget"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>
<include location="GuiQtDev.qrc"/>
</resources>
<connections/>
</ui>

GuiQtDev.qrc:

<RCC>
<qresource prefix="/">
</qresource>
</RCC>

GuiQtDev.h:

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_GuiQtDev.h" class GuiQtDev : public QMainWindow
{
Q_OBJECT public:
GuiQtDev(QWidget *parent = Q_NULLPTR); private:
Ui::GuiQtDevClass ui;
};

GuiQtDev.cpp:

#include "GuiQtDev.h"

GuiQtDev::GuiQtDev(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
}

新建工程:

在解决方案下新建一个modules文件夹,然后右击modules新建空白项目:

然后把源码拖到工程里:

然后设置项目输出目录及项目设置为静态库:

然后设置附加包含目录:

然后设置预处理器:

接下来编辑资源文件:

首先拷贝一个图标文件到源码文件中:

然后在vs中右击qrc文件,选择默认打开方式为QrcEditor.exe:

然后双击qrc文件进行添加图标:

接下来右击ui文件,选择默认打开方式为designer.exe:

双击ui文件进行编辑,比如拖拽一个按钮,并且为按钮显示ico图标(注意后续修改ui文件时要手动重新生成该项目,因为vs无法知道ui文件被修改):

这样界面就设计好了。

接下来描述GuiQtDev模块编译原理。

首先要使用uic.exe将GuiQtDev.ui转换为ui_GuiGifView.h,然后使用moc.exe将GuiQtDev.h转换为moc_GuiQtDev.cpp,然后使用rcc.exe将GuiQtDev.qrc转换为GuiQtDev.rcc。右击工程在生成前事件中进行自动转换:

右击工程点击生成,则自动生成这3个文件:

然后将ui_GuiQtDev.h和moc_GuiQtDev.cpp拖拽到工程中:

然后在GuiQtDev.cpp中增加rcc资源注册的代码:

然后生成该项目:

6、配置Main工程

首先设置Main工程依赖项:

然后删去原有的Main.cpp,重新写一个

main.cpp:

#if defined(WIN32) | defined(_WINDOWS)
//不显示控制台
#pragma comment(linker,"/subsystem:windows /entry:mainCRTStartup")
#pragma comment(lib, "Shell32.lib")
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "User32.lib")
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "Advapi32.lib")
#pragma comment(lib, "Crypt32.lib")
#pragma comment(lib, "legacy_stdio_definitions.lib")
#pragma comment(lib, "Winmm.lib") #pragma comment(lib, "BaseFunc.lib")
#pragma comment(lib, "GuiQtDev.lib") #ifndef _DEBUG
#pragma comment(lib, "Qt5Core.lib")
#pragma comment(lib, "Qt5Gui.lib")
#pragma comment(lib, "Qt5Widgets.lib")
#else
#pragma comment(lib, "Qt5Cored.lib")
#pragma comment(lib, "Qt5Guid.lib")
#pragma comment(lib, "Qt5Widgetsd.lib")
#endif
#endif #include "GuiQtDev.h" int main(int argc, char* argv[])
{
QApplication app(argc, argv); GuiQtDev v;
v.show(); app.exec(); return 0;
}

然后配置工程输出目录和中间目录:

然后配置附加包含目录:

Main预处理器设置:

然后配置附加库目录:

然后右击生成:

最后如果要使程序能够在vs中和在目录里双击exe来正确运行程序的话,还需要配置Main工程的生成后事件,拷贝动态库和资源文件到对应目录:

然后运行exe,可以看到ico图标显示正常:

接下来为exe设置logo:

首先在Main工程目录下放一个logo.ico,然后新建一个logo.rc,文件内容如图,并且在Main.vcxproj里增加三行如图:

然后重新生成exe后就看到有了logo:

接下来我们写当双击某个文件使用我们的exe打开时,如何正确加载资源文件及获取当前选中的文件名:

先设计ui,拖放一个lineEdit控件来显示文件名:

然后加一个接口来提供外部调用:

然后在main函数中获取输入的文件名(第二个参数)来设置到界面中,这里需要注意的是vs默认使用的是gbk编码,而Qt默认使用utf8编码,所以要将字符串转换一下,否则中文会乱码:

运行程序:

发现PushButton的ico不显示了,解决方法:加载rcc文件使用绝对路径,并且要注意编码问题:

先设置GuiQtDev项目为Unicode编码:

然后修改资源加载代码:

重新运行后可以看到资源加载成功:

7、项目发布

免安装包:

就是这个文件夹:

安装包:

使用setup factory来打包Release文件夹,并且可以设置程序是否自动启动及添加桌面快捷方式等。

Qt项目简易开发原理及常见问题解决的更多相关文章

  1. Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结

    Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结 1. 本文范围 1 2. Angular的优点 1 2.1. 双向数据绑定 1 2.2. dsl ...

  2. eclipse开发android程序常见问题解决办法

    1:R.java不自动更新或不见,gen文件夹里没生成文件. 解决办法: 这个一般是xml文件中有错误,如有英文大写,属性值错误等,解决了就会好. 如果错都排除了还没有生成或更新,那么可以点击proj ...

  3. java web开发遇到的常见问题解决办法(汇总贴)

    1. maven下载jar包失败,重复 maven --> update project 不管用 解决办法:  1.打开本地仓库所在目录, 通过win文件夹的搜索功能,查找 *.lastUpda ...

  4. 基于Cmake+QT+VS的C++项目构建开发编译简明教程

    目录 一.工具下载与安装 1.     Qt 2.     Visual Studio 2015 3.     Cmake 二.C++及Qt项目构建 1.     基于VS构建Qt项目 2.     ...

  5. 团队项目开发中,常见的版本控制有svn,git

    团队项目开发中,常见的版本控制有svn,git

  6. Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)

    Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)    转 https://blog.csdn.net/lhl1124281072/article/details/800 ...

  7. 使用VisualStudio2015开发QT项目

    一直习惯用VS,做QT项目时,不停的来回切IDE有些不方便.研究了一下QT的编译. 实际QT编译的机制和cmake是相同的,QT的IDE使用pro文件进行项目管理.QMake通过解析pro工程文件,生 ...

  8. Qt核心机制与原理

    转:  https://blog.csdn.net/light_in_dark/article/details/64125085 ★了解Qt和C++的关系 ★掌握Qt的信号/槽机制的原理和使用方法 ★ ...

  9. 20155213免考项目——简易的HIDAttack

    20155213免考项目--简易的HIDAttack 听5214说他做不出来自己的免考项目,于是就转向bof进阶,并且成功做出了64位的ROP攻击...... 既然如此,那我就再做一个吧,但都已经期末 ...

随机推荐

  1. CentOS-yum安装Docker环境(含:常用命令)

    安装Docker环境 $ yum install docker -y 启动Docker $ systemctl start docker 设置自启动 $ systemctl enable docker ...

  2. 面试:Spring面试知识点总结

    Spring知识点总结 1. 简介一下Spring框架. 答:Spring框架是一个开源的容器性质的轻量级框架.主要有三大特点:容器.IOC(控制反转).AOP(面向切面编程). 2. Spring框 ...

  3. XCTF WEB backup

    不用多说,肯定是扫描后台,目录看看能不能找到备份文件,(可恶我的御剑的字典太菜了,居然爆破不出来),建议大家装御剑高一些的版本,或者用dirsearch来扫描,都是不错的. 这里插个知识点,备份文件常 ...

  4. 64. Minimum Path Sum 动态规划

    description: Given a m x n grid filled with non-negative numbers, find a path from top left to botto ...

  5. Appium - adb命令操作

    1.Android 调试桥adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信.它可为各种设备操作提供便利,如安装和调 ...

  6. Python自动化测试面试题-MySQL篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  7. 2021最新Java基础知总结,助力大厂offer

    本文是我花了三周时间整理出来的,希望对Java初学者有帮助~ Java概述 Java的特点 Java是一门面向对象的编程语言.面向对象和面向过程是一种软件开发思想. 面向过程就是分析出解决问题所需要的 ...

  8. jvm源码解读--04 常量池 常量项的解析CONSTANT_Class_info

    接上篇的继续 ConstantPool* constant_pool = ConstantPool::allocate(_loader_data, length, CHECK_(nullHandle) ...

  9. Java生鲜电商平台-关于学习生鲜电商平台的思考(小程序/APP)

    Java生鲜电商平台-关于学习生鲜电商平台的思考(小程序/APP) 说明:最近群里面的一个网友问的一个问题,让我陷入了深思,他问的问题很基础也很真实,"大佬,你们是怎么学习的呢?" ...

  10. 基于STC51单片机的霓虹灯

    基于STC51单片机的霓虹灯 设计要求: 使用PWM驱动8个LED灯 人眼不能观察到灯光全灭 灯光要有动画效果 设计概述: ​  按照设计要求,为了更直观的说明脉冲宽度调制技术(PWM),所以霓虹灯的 ...