因为项目需要,这几天学习一下qt5的相关知识,算是一些皮毛,但是入门也算差不多了。

本文适用于在c++ cmake项目中使用qt,需要快速入门的同学。

环境配置

操作系统:ubuntu 18.04

编译工具:cmake

我在官网上先下载了qt5的安装包,但是,还是需要在终端再安装几个库才行

sudo apt-get install qtbase5-dev
sudo apt-get install qtdeclarative5-dev

小程序

1.helloworld

来看一下QT5版的helloworld

目录组织形式:

cmake编译流程

mkdir build
cd build
cmake ..
make

main.cpp源码

#include <stdio.h>
#include <QMainWindow>int main(int argc, char *argv[])
{printf("qt5 cmake:hello\r\n");return 0;
}

CMakeLists.txt源码

cmake_minimum_required(VERSION 3.5)
project(hello_qt5)set(CMAKE_CXX_STANDARD 14)
message("hello world")
message(CMAKE_PREFIX_PATH)
find_package(Qt5 COMPONENTS Core Widgets REQUIRED)add_executable(hello_qt5 main.cpp)target_link_libraries(hello_qt5 PRIVATE Qt5::Core Qt5::Widgets)

后来,通过ccmake发现cmake所找到的QT版本不是我想使用QT版本,在这种情况下,请在CMakeLists中设定QT和qmake的位置。在CMakeLists中添加下列代码

set(QT_QMAKE_EXECUTABLE /home/$ENV{user}/Qt5.9.0/5.9/gcc_64/bin/qmake)
set(Qt5_DIR /home/$ENV{user}/Qt5.9.0/5.9/gcc_64/lib/cmake/Qt5)   

第一个程序很简单,打印hello world

可视化窗口

学qt的目的当然是显示窗口啦,那来看一下怎么可视化窗口

main.cpp

#include <QApplication>
#include <QWidget>
#include <QPushButton>class MyButton : public QWidget {public:MyButton(QWidget *parent = nullptr);
};MyButton::MyButton(QWidget *parent): QWidget(parent) {auto *quitBtn = new QPushButton("退出", this);quitBtn->setGeometry(50, 40, 75, 30);/**The qApp is a global pointer to the application object. It is defined in the QApplication header file.**/connect(quitBtn, &QPushButton::clicked, qApp, &QApplication::quit);
}int main(int argc, char *argv[]) {QApplication app(argc, argv);MyButton window;window.resize(250, 150);window.setWindowTitle("QPushButton");window.show();return app.exec();
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(qt5_pushButton)set(CMAKE_CXX_STANDARD 14)
message("hello world")
message(CMAKE_PREFIX_PATH)
find_package(Qt5 COMPONENTS Core Widgets REQUIRED)add_executable(qt5_pushButton main.cpp)target_link_libraries(qt5_pushButton PRIVATE Qt5::Core Qt5::Widgets)

相关解释

这里我们经常要引入的头文件包括:

#include <QApplication>
#include <QWidget>

根据官网解释,QApplication

The QApplication class manages the GUI application's control flow and main setting.

QApplication 主要用于界面的控制流和主要设置。它对应的会创建一个单例对象

QWidget是所有用户界面对象(比如窗口,cursor)的基类

he QWidget class is the base class of all user interface objects.

The widget is the atom of the user interface: it receives mouse, keyboard and other events from the window system, and paints a representation of itself on the screen. Every widget is rectangular, and they are sorted in a Z-order. A widget is clipped by its parent and by the widgets in front of it.

信息槽

信息槽是qt的重要属性之一,我对于它的理解是,相对于callback的方式,它是一种松耦合的信息传输方式。它所用到的函数就是connect。

TODO:进一步解释

例子:

感兴趣的可以参考zetcode链接的很多例子:https://zetcode.com/gui/qt5/eventsandsignals/​​​​​​

顺便附上CMakeLists.txt模板,大家需要稍微改一下:

cmake_minimum_required(VERSION 3.0.2)
project(disconnect)//项目名称,懒的话就别改了
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(QT_QMAKE_EXECUTABLE /home/$ENV{user}/Qt5.9.0/5.9/gcc_64/bin/qmake)
set(Qt5_DIR /home/$ENV{user}/Qt5.9.0/5.9/gcc_64/lib/cmake/Qt5)   find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
add_library(_discon disconnect.cpp) #TODO 改lib和cpp文件名称
target_link_libraries (_discon Qt5::Widgets) #TODO 改编译的库名称add_executable(Disconnect main.cpp) #改可执行文件名称
target_link_libraries (Disconnect _discon)//改lib,项目名称

值得注意的是,下面这行非常关键,我也是当编译失败的时候才意识到的

set(CMAKE_AUTOMOC ON)

AUTOMOC is a boolean specifying whether CMake will handle the Qt moc preprocessor automatically,

总之,它可以让cmake针对qt进行预处理,当代码添加了Q_OBJECT 这样的Marco时。

更高阶的应用之后再写~

Peace

参考:

zetcodehttps://zetcode.com/gui/pyqt5/firstprograms/

信息槽介绍http://shouce.jb51.net/qt-beginning/49.html

Qt(C++)入门学习相关推荐

  1. Qt 快速入门学习笔记

    Qt 快速入门学习笔记 环境安装 环境配置以及安装 安装包下载地址 1.windows安装 msvc编译器模块需要安装Windows软件开发工具包. MinGW是Windows平台使用GNU工具导入库 ...

  2. QT快速入门学习总结

    QT简介 QT是什么:QT是一个跨平台的C++应用程序开发框架. 最大特点:只需编写一次代码就可以跨桌面.手机.嵌入式等多种平台. 支持所有主流平台:Windows.Linux/X11.macOS.Q ...

  3. VC++ 下使用QT初步入门学习

    初步了解,VC++下使用QT,一种方式是,用QT的工具或命令行,生成VS的工程,然后导入VC进行构建:下面来看一下,下载一个QT免费试用版本: 安装之后,先设置一下环境变量:test3目录下放一个示例 ...

  4. Qt学习之Qt基础入门(下)

    1. 前言 前两篇博客简单的阐述了一下Qt的入门用法,这篇博客继续跟着视频学习. Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) ...

  5. Qt学习之Qt基础入门(中)

    1. 前言 上一篇博客,总结了Qt的一些基础用法,这篇博客继续跟视频学习Qt的常用方法 Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门( ...

  6. 学习笔记之Qt从入门到精通(三)

    整理日期: 2010年4月9日 本文是学习笔记之Qt从入门到精通(二)的接续 Part 3: 进阶学习 Qt4 学习笔记 Qt 可以运行在不同的平台,像是Unix/X11.Windows.Mac OS ...

  7. Qt入门学习——Qt Creator的使用

    Qt Creator介绍 通过前面<Qt快速入门(vim纯代码编写)>的学习得知,只有搭建好了 Qt 环境(Qt库和开发工具),即可通过 vim 纯代码编写 Qt 程序,再借助 Qt 里的 ...

  8. 第15.12节PyQt(Python+Qt)入门学习:可视化设计界面组件布局详解

    一.引言 在Qt Designer中,在左边部件栏的提供了界面布局相关部件,如图: 可以看到共包含有四种布局部件,分别是垂直布局(Vertical Layout).水平布局(Horizontal La ...

  9. qt学习笔记 来自B站【最新QT从入门到实战完整版|传智教育】

    最新QT从入门到实战完整版|传智教育 目录在这里 2022.2.4 day1 06 QPushButton创建 07 对象树 08 Qt的坐标系 09 信号和槽-点击按钮关闭窗口 10 自定义信号和槽 ...

  10. QT快速入门、三点求圆心实现详解

    在编程中,会经常用到数学计算,所以C++将常用的数学计算,例如求正余弦等,封装成函数(正是我们在3.2 数学计算中学习到的),我们只需要写入简单的语句就可以执行所需要的功能,这正是函数的意义.在这一章 ...

最新文章

  1. 程序员加班崩溃,过路外卖小哥主动帮忙改代码,网友直呼太暖了!
  2. 取消Exchange数据库的自动分配功能
  3. 【Android 应用开发】 Application 使用分析
  4. redis三种架构:主从Cluster哨兵+整合Springboot访问redis
  5. java2第九章的总结_java并发的艺术-读书笔记-第九章线程池
  6. 使用 scikit-learn 实现多类别及多标签分类算法
  7. Wordpress安装简要说明
  8. shell 管道命令 、、||、>、>>(精)
  9. Compass.net
  10. 【渝粤教育】国家开放大学2018年秋季 2586T城市轨道交通车站设备 参考试题
  11. win7副本不是正版_征途正版官网版下载-征途正版手游官网版下载1.0
  12. 我爱 Ruby 的三十七个理由
  13. google阅读器快捷键
  14. 家用无线路由器哪个品牌好?程序员分享值得推荐的无线路由器
  15. 计算机及相关经典书籍收集
  16. 在Centos6/RHEL6上恢复ext4文件系统下误删除的文件
  17. 无需会员将有道云笔记脑图转换xmind
  18. react 数据可视化_使用d3创建数据可视化并在2020年做出React
  19. SQL Pivot 行转列
  20. div样式之margin

热门文章

  1. 2021届Java开发求职-------面试实战之Vivo提前批
  2. unity摄像机环绕物体旋转
  3. k30s刷鸿蒙系统,RedmiK30S或于10月27日发布:今年最后一款骁龙865手机
  4. 微软首次公开 GitHub 产品路线图
  5. 【解决】敬业签Windows电脑桌面便签软件安装不能打开要写入的文件问题造成桌面便签软件安装失败的解决办法
  6. OpenLayers 3 之 Overlay(覆盖物)详解
  7. mysql中字符串拼接函数_MySQL 字符串连接CONCAT()函数
  8. 实战! excel常用函数中lookup的用法
  9. GPON网络架构简介
  10. matlab在有限差分法中的应用,MATLAB在有限差分法数值计算中的应用