嵌入式软件——QT5的使用-程序员宅基地

技术标签: c++  qt  linux  windows  开发语言  

Qt5是一个流行的C++框架,用于开发跨平台的应用程序。以下是使用Qt5的基本步骤:

安装Qt5:

首先,确保你已经安装了Qt5框架。你可以从Qt官方网站下载Qt安装程序并按照安装指南进行安装。具体地址是:http://download.qt.io/

创建一个Qt项目:

使用Qt Creator或任何其他喜欢的IDE,创建一个新的Qt项目。在创建项目时,选择应用程序类型(如窗口应用程序、控制台应用程序等)以及所使用的Qt模板。 

打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项

弹出New Project对话框,选择Qt Widgets Application,

 

编写代码:

使用C++语言编写你的应用程序代码。Qt提供了许多类和模块,用于处理图形界面、事件处理、文件操作等等。你需要熟悉Qt的类和函数来构建你的应用程序。 

Hello World!

Qt应用的UI界面设计支持xml或者Qt Designer进行可视化设计,也可以通过C++代码建立视图。

上述 Qt 工程包括:

根据需要定义界面对象,在需要时调用其show()方法显示界面。

事件处理:

使用Qt的信号和槽机制来处理用户输入和其他事件。这是Qt中一种重要的事件处理方式。

解释
(1)信号和槽是用于QT对象之间的通信,信号可以有某种动作触发,也可以直接由代码触发。
(2)槽也叫操函数,当完成了信号和槽的连接之后,一旦触发信号,自动调用连接的槽函数。
(3)信号和槽的连接是动态的,对象释放后会自动断开所有的信号和槽。
(4)代码触发信号的写法

如何连接信号和槽

注:

  • .pro 文件 qmake配置文件

  • dialog.h头文件 声明界面方法等

  • diaglog.cpp 事件监听及相应代码

  • main.cpp 入口和主程序逻辑

  • 除了使用Qt Designer或编辑.ui文件外,Qt可以使用C++代码控制ui组件。这里我们完全使用代码创建一个与效果相同的工程,并解释它的机制。

    mainwindow. h:

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    //防止重复包含的哨兵,C/C++惯用
     
    #include <QMainWindow>
    //包含组件
     
    namespace Ui { //定义namespace
      class MainWindow;
    }
     
    //顶级组件MainWindow的类声明
    class MainWindow : public QMainWindow
    {
          Q_OBJECT
        //Q_OBJECT宏提供了信号槽机制、国际化机制和不基于C++ RTTI的反射能力
        //建议均包含此宏
     
    public:
       explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
      //构造函数与析构函数
     
    private:
       Ui::MainWindow *ui;  //定义了ui作为访问接口
    };
     
    #endif // MAINWINDOW_H

    mainwindow.cpp:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
     
    MainWindow::MainWindow(QWidget *parent) :
      QMainWindow(parent),
      ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    }
     
    MainWindow::~MainWindow()
    {
      delete ui;
    }

    main.cpp:

    #include "mainwindow.h"
    #include <QApplication>
    #include <QLabel>
    #include <QPushButton>
    //头文件包含
     
    int main(int argc, char *argv[]) //main函数
    {
        QApplication a(argc, argv);//定义应用对象,从参数看它是支持命令行的
        MainWindow w;   //定义mainwindow顶级组件
        QLabel *label = new QLabel("Hello World!", &w); //自定义Label组件
        QPushButton *button = new QPushButton("Disp", &w);//自定义PushButton组件
        w.show(); //绘制主窗口w
        button -> show(); //绘制按钮
        QObject::connect(button,SIGNAL(clicked()),label,SLOT(show()));
        /*重点来了:信号槽
         * 信号槽是Qt实现事件响应的机制,当某一组件的某事件发生时将会发出相应的信号(SIGNAL)
         * 与此信号相关的槽(SLOT)将会收到该信号并响应事件
         *
         * connect函数则可以将信号和槽关联起来
         * QObject::connect(Object *sender,Func signal,Object* reciver,Func slot)
         * 信号和槽本质上都是函数,信号由组件定义,槽则由程序员定义
         */
        return a.exec();
        /* 运行消息循环
         * 应用等待事件的发生并进行响应
         */
    }

    组件与布局

  • Qt Desinger可以方便地设置布局,Qt 同样允许以C++代码创建布局:

    #include <QApplication>
    #include <QLabel>
    #include <QPushButton>
    #include <QHBoxLayout>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QWidget  *w = new QWidget;
        QLabel *label = new QLabel("Hello World!");
        QPushButton *button = new QPushButton("Clear");
        QHBoxLayout *layout = new QHBoxLayout;
        layout ->addWidget(label);
        layout ->addWidget(button);
        w->setLayout(layout);
        w->show();
        QObject::connect(button,SIGNAL(clicked()),label,SLOT(clear()));
        return a.exec();
    }

    组件介绍

  • 它可以使用start(int msec)方法来开始计时timer->start(1000);
  • timer -> stop();方法将阻止继续计时。
  • 在main.cpp文件中包含新的界面类头文件

    #include "mainwindow2.h"

    在namespace Ui中添加新的界面类

    namespace Ui {
    
    class MainWindow;
    
    class MainWindow2;
    
    }

1、只有类型相同的信号和槽才能连接
2、一个信号可以连接多个槽,一个槽连接多个信号。

QObject::connect(发送信号对象的地址,信号,接收信号对象的地址,槽函数);

QObject::connect(btn,SIGNAL(信号…),this,SIGNAL(信号…));

部署:

一旦你的应用程序完成,你可以将其部署到目标平台上。Qt支持多个平台,包括Windows、Linux和macOS。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/2301_77630091/article/details/132666244

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue