【Qt】QtCreator新建QtWidgetsApplication

news2024/11/17 14:34:52

【Qt】QtCreator新建QtWidgetsApplication

  • 1、背景
  • 2、新建项目
  • 3、项目文件
  • 4、编译说明

1、背景

操作系统:windows10专业版。
Qt版本:qt-opensource-windows-x86-msvc2013_64-5.7.1.exe
注意:安装了该exe可执行文件,就自动安装了qtcreator5.7.1。
QtCreator是开发Qt程序的IDE。

本博客介绍最基本的QtCreator使用,
即新建项目,选择Application(应用程序)–>“Qt Widgets Application”

2、新建项目

新建的项目是Qt Widgets Application。

step-1:点击菜单栏文件–>新建文件或项目
在这里插入图片描述

step-2:模板–>项目(Application)–>Qt Widgets Application
在这里插入图片描述

step-3:填写项目名称以及项目目录
在这里插入图片描述

step-4:选择编译器工具包Kit
在这里插入图片描述

step-5: 填写类名以及选择基类
注意基类一共有3种,分别是:QMainWindow、QWidget、QDialog;
如下图,基类选择的是QMainWindow
在这里插入图片描述

step-6: 点击完成
在这里插入图片描述

3、项目文件

以上步骤完成Qt Widgets Application项目的新建,将在选择的目录生成项目文件,分别如下:

项目文件QtWidgetsApp.pro:
在这里插入图片描述

继承窗体界面class的头文件mainwindow.h:
在这里插入图片描述

继承窗体界面class的源文件mainwindow.cpp:
在这里插入图片描述

程序入口函数main函数的源文件main.cpp:
在这里插入图片描述

界面文件,即xml格式的窗体文件mainwindow.ui:
在这里插入图片描述

4、编译说明

4.1、关于ui_mainwindow.h说明:
可以看到QtWidgetApp.pro文件内容中:

FORMS    += mainwindow.ui

对应的是mainwindow.cpp源代码中的第2行:

#include "ui_mainwindow.h"

ui文件是xml格式的,Qt编译时,先用uic.exe工具将mainwindow.ui编译生成ui_mainwindow.h头文件。

而mainwindow.cpp源代码中的列表初始化部分如下:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

冒号后面的两行代码,是C++的列表初始化。其中QMainWindow(parent) 是父类构造函数的初始化列表操作,即显式调用基类(父类)的构造函数。

ui(new Ui::MainWindow) 是子类的成员初始化,即初始化ui指针,ui指针在mainwindow.h中定义的。

可以改成如下写法:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    ui=new Ui::MainWindow;
    ui->setupUi(this);
}

这个头文件ui_mainwindow.h是c++类,可以通过
uic.exe mainwindow.ui -o ui_mainwindow.h得到,内容如下:

/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created by: Qt User Interface Compiler version 5.7.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QWidget *centralWidget;
    QStatusBar *statusBar;

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QStringLiteral("MainWindow"));
        MainWindow->resize(400, 300);
        menuBar = new QMenuBar(MainWindow);
        menuBar->setObjectName(QStringLiteral("menuBar"));
        MainWindow->setMenuBar(menuBar);
        mainToolBar = new QToolBar(MainWindow);
        mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
        MainWindow->addToolBar(mainToolBar);
        centralWidget = new QWidget(MainWindow);
        centralWidget->setObjectName(QStringLiteral("centralWidget"));
        MainWindow->setCentralWidget(centralWidget);
        statusBar = new QStatusBar(MainWindow);
        statusBar->setObjectName(QStringLiteral("statusBar"));
        MainWindow->setStatusBar(statusBar);

        retranslateUi(MainWindow);

        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", Q_NULLPTR));
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/149720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【openGauss实战3】基本概念及语法

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61…

创建Vuex时没有$store的解决

为什么会出现这个问题呢&#xff1f;就是因为你的vuex安装的版本是最新版本 vue3版本对应的是 vue2 vue4版本对应的是 vue3 如果你在vue2项目中&#xff0c;所有的配置好了&#xff0c;组件中就是没有$store属性&#xff0c;那么很有可能是安装的vuex插件版本过高 store…

ArcGIS Pro脚本工具(16)——要素类转txt坐标文件

之前介绍过txt坐标文件如何转为GIS要素类 ArcGIS Pro脚本工具&#xff08;8&#xff09;——txt坐标文件转shp_学学GIS的博客-CSDN博客_txt转shp国土部门给过来的数据经常需要转换&#xff0c;比如土地报批和高标准农田的数据经常给一个txt文件过来&#xff0c;不能直接在GIS软…

Python状态机(transitions模块)

文章目录1、为什么要用状态机&#xff1f;2、状态机是什么&#xff1f;3、状态图是什么&#xff1f;4、transitions是什么&#xff1f;官网安装使用状态机必须定义的两个要素二、实战应用1、规划state、transitionstate&#xff1a;状态节点的说明transition&#xff1a;状态转…

昆腾微冲刺创业板上市:计划募资5亿元,股权结构较为分散

撰稿|汤汤 来源|贝多财经 近日&#xff0c;北京昆腾微电子股份有限公司&#xff08;下称“昆腾微”&#xff09;在深圳证券交易所递交招股书&#xff0c;准备在创业板上市。本次冲刺上市&#xff0c;昆腾微计划募资5.07亿元&#xff0c;拟用于音频SoC芯片升级、产业化项目&am…

(5)go-micro微服务domain层开发

文章目录一 domain层介绍说明二 model层开发三 repository层开发四 service层开发五 最后一 domain层介绍说明 domain层专注于数据库数据领域开发&#xff0c;我们把数据库相关操作全部写在domain层。 model层&#xff1a;数据表字段定义与开发 repository层&#xff1a;数据…

JIMDB 大KEY治理

大KEY判定条件 单个String类型的Key大小达到20KB并且OPS高 单个String达到100KB 集合类型的Key总大小达到1MB 集合类型的Key中元素超过8000个 大KEY影响 严重影响 QPS 、TP99 等指标&#xff0c;对大Key进行的慢操作会导致后续的命令被阻塞&#xff0c;从而导致一系列慢查询。…

前端——周总结系列一

1 JS数据类型判断 typeof&#xff1a;判断JS数据类型&#xff0c;返回一个字符串类型 注&#xff1a;在 javaScript 中&#xff0c;如果二进制的前三位都为 0 的话&#xff0c;会判定为是 Object 类型。 null 的存储二进制是 000 &#xff0c;也是前三位&#xff0c;所以系统…

面试官:说说Event Loop事件循环、微任务、宏任务

前言 JS是一门单线程语言&#xff0c;单线程就意味着&#xff0c;所有的任务需要排队&#xff0c;前一个任务结束&#xff0c;才会执行下一个任务。这样所导致的问题是&#xff1a;如果JS执行的时间过长&#xff0c;这样就会造成页面的渲染不连贯&#xff0c;导致页面渲染加载…

SOLIDWORKS有哪些好用的插件丨慧德敏学

SOLIDWORKS软件本身就带有很多插件&#xff0c;比如ToolBox、motion、routing、simulation等&#xff0c;都是直接嵌入到软件内部使用的。同时由于其API接口是完全开放的&#xff0c;因此还支持第三方插件的使用&#xff0c;SW第三方插件有很多&#xff0c;常用的有比如SolidKi…

React源码解读之ReactFiber

开始之前&#xff0c;先讲一下该文章能帮你解决哪些问题&#xff1f; facebook为什么要使用重构ReactReact Fiber是什么React Fiber的核心算法 - react是如何中断重启任务的react fiber部分源码简化版 前言 该文章涉及的源码部分基于React v17.0.2 why React Fiber 浏览器…

Spring常见面试题

Spring面试问题汇总①⭐Spring是什么对AOP的理解⭐对IOC的理解⭐如何实现IOC容器SpringBoot、SpringMVC、Spring的区别⭐⭐ApplicationContext和BeanFactory的区别⭐⭐⭐SpringBean的生命周期⭐⭐解释下Spring支持的几种bean的作用域⭐⭐Spring框架中的单例bean是线程安全的吗&…

数据库视图注意事项

视图&#xff08;view&#xff09;是一种虚拟存在的表&#xff0c;其内容由查询定义 本身并不包含数据。 它是作为一个select语法查询到的结果集&#xff0c;以此为基表创建的一张虚拟表 基表 行和列数据来自由定义视图的查询所引用的表&#xff0c;并且在引用视图时动态生成 …

【ReadPaper学术交流会】结构重参数化

提出结构重参数化的论文RepVGG 重参数化已经用在了各个领域的各个方面&#xff1a;比如YOLO-V6,YOLO-V7,可以autoperform YOLO-V6和YOLO-V7的一个PP-YOLO 1 我们想要一个像VGG一样的全是3*3卷积&#xff0c;一卷到底的结构&#xff0c;这样的结构并行度高、速度快而且省显存。…

剑指offer----C语言版----第十三天

目录 1. 删除链表的节点 1.1 题目描述 1.2 Leetcode解题的思路一&#xff08;双指针&#xff09; 1.3 Leetcode解题的思路二&#xff08;单指针&#xff09; 1.4 剑指offer上的原题 1. 删除链表的节点 原题链接&#xff1a;剑指 Offer 18. 删除链表的节点 - 力扣&#xff…

【python】类型约束(类型提示的作用)

文章目录前言一、类型系统1.动态类型2.静态类型3.鸭子类型二、变量注解1.变量注解的语法2.注解鸭子类型三、复杂&#xff08;复合型&#xff09;变量的注解1.引入2.难题3. Any的妙用4.类型变量5.类型Optional总结前言 python是一种解释型强类型动态语言python3.5以前是没有类型…

【Python】基于高德地图API的坐标转换函数

【Python】基于高德地图API的坐标转换函数 API申请&#xff1a; lbs.amap.com/api/webservice/guide/api/convert/产品介绍 坐标转换是一类简单的HTTP接口&#xff0c;能够将用户输入的非高德坐标&#xff08;GPS坐标、mapbar坐标、baidu坐标&#xff09;转换成高德坐标。 …

【学习笔记之Linux】权限之目录权限与默认权限

权限概念 一件事是否允许被谁“做”&#xff0c;这就是权限。权限 用户 文件属性。   在Linux上&#xff0c;用户分为普通用户和root。root是超级管理员 ≈ 天王老子&#xff0c;只能够有一个。root的命令提示符是#&#xff1b;普通用户通过root创建&#xff0c;可以有多个…

【Android安全】Protobuf原理与解析

protobuf 简介 抓包时看到header中有这个&#xff1a; content-type: application/x-protobuf说明包的content是以protobuf格式编码的 关于protobuf的介绍&#xff0c;可以参考&#xff1a; https://techkranti.com/what-is-protobuf-explained-for-hackers/ protobuf 的背…

C++——类和对象(一)

目录 一. 面向过程和面向对象 二. 类的引入 三. 类的定义 1.结构 2.类的作用域 3.类的两种定义方式 四. 类的访问限定符及封装 1.引入 2.访问限定符 3.封装 五. 类的实例化 六. 类对象模型 七. this指针 1.this指针的引出 2.this指针的特性 一. …