当前位置: 首页 > news >正文

【Qt】多种控件实现“hello world“

使用编辑框的方式实现"hello wordl"

使用编辑框实现"hello world"的方式有俩种:

  • 单行编辑框:LineEdit
  • 多行编辑框:TextEdit

图形化界面

 

纯代码方式

 代码展示:

#include "widget.h"
#include "ui_widget.h"
#include<QLineEdit>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLineEdit* LineEdit = new QLineEdit(this);LineEdit->setText("hello world");
}Widget::~Widget()
{delete ui;
}

使用按钮的方式实现"hello world"

图形化界面

  • PushButton是普通按钮

运行之后,出现一个"hello world"的按钮。

但是这个点击之后是没有反应的,这里就需要联系到Qt中的信号槽机制。

信号槽机制的本质是:给按钮的点击操作,关联上一个处理函数,当用户点击的时候就会执行这个处理函数。

这里需要借助connect()这个函数。

        【注意】在Linux网络编程中,也有一个connect函数,这个函数用来给TCP socket建立连接的,在写TCP的时候,需要先建立连接,然后才能读写数据。

        而Qt中的connect和TCP的建立连接没有任何关系,Qt中的connet是Qobject这个类提供的静态函数,这个函数的作用就是“连接信号”和“槽”。

connect函数中有4个参数。

第一个函数是访问到form file(ui文件)中的创建的控件,在Qt Designer中创建一个控件的时候,此时就会给这个控件分配一个objectName属性,这个属性的值,再界面中是唯一的,不能重复。

这里会自动生成这个变量,也可以手动修改。

qmake在预处理.ui文件的时候,会根据objectName生成对应的C++文件,C++代码中QpushButon对象的变量名字就是这里的objectName,这个变量就是ui属性中的成员变量。

widget.h文件代码

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handleClick();private:Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp文件代码

#include "widget.h"
#include "ui_widget.h"#include<QWidget>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->pushButton, &QPushButton::clicked, this, &Widget::handleClick);
}Widget::~Widget()
{delete ui;
}void Widget::handleClick()
{if(ui->pushButton->text() == QString("hello world")){ui->pushButton->setText("hello qt");}else{ui->pushButton->setText("hello world");}
}

connect函数的四个参数的含义分别是

 这里&QPushButton::clicked的意思是点击按钮的时候就会自动触发信号。

  • 此时当按钮被点击的时候,就会将按钮中的文本进行切换

我们通过打开ui_widget.h文件,可以看到图形化界面生成的C++代码。

 将上一级文件中的ui_widget文件拖入到Qt中。

下面可以看到Qt自动生成的代码:

纯代码方式

widget.h文件代码

#ifndef WIDGET_H
#define WIDGET_H
#include<QPushButton>
#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handClick();
private:Ui::Widget *ui;QPushButton* myButton;
};
#endif // WIDGET_H

widget.cpp文件代码

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);myButton = new QPushButton(this);myButton->setText("hello world");connect(myButton, &QPushButton::clicked, this, &Widget::handClick);
}Widget::~Widget()
{delete ui;
}void Widget::handClick()
{if(myButton->text() == QString("hello world")){myButton->setText("hello qt");}else{myButton->setText("hello world");}
}

        对于纯代码的版本,按钮对象是咱们自己new的,为了保证其他函数中能访问到这个变量,需要把按钮对象设定为Widget类的成员变量。

        对于图形化界面的方式,此时按钮对象不需要自己new。new对象的操作已经被Qt自动生成了,而且这个按钮对象,已经作为ui对象里的一个成员变量,无需作为widget的成员。

在实际开发过程中,图形化界面构造方式和纯代码构造方式都是非常重要的。

如果当前程序界面的界面内容是比较固定的,就会以图形化界面的方式来构造界面;但是如果程序界面经常会发生动态变化,此时就会以代码的方式来构造界面。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从今天开始深入学习 SQL 优化
  • 搭建 Web 群集Haproxy
  • 安装pointnet踩坑记录(情绪篇)
  • 学习c语言第24天(练习)
  • 进程状态(二)----- linux 中具体的进程状态(上)
  • 设置临时环境变量
  • utf-8‘ codec can‘t decode byte 0xd3 in position
  • Django ASGI服务
  • 易境通海运系统,让财务对账不再是老大难
  • 使用 1panel面板 部署 springboot 和 vue
  • Python酷库之旅-第三方库Pandas(073)
  • Preferences首选项存储工具类(Harmony OS)
  • 【实现100个unity特效之12】Unity中的冲击波 ——如何使用ShaderGraph制作一个冲击波着色器
  • 实时数据监控,三防平板在工业领域的应用解析
  • Unity补完计划 之 Mask SortingGroup
  • 分享一款快速APP功能测试工具
  • 【React系列】如何构建React应用程序
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • create-react-app做的留言板
  • egg(89)--egg之redis的发布和订阅
  • Java多态
  • MySQL的数据类型
  • quasar-framework cnodejs社区
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue 动态创建 component
  • 创建一个Struts2项目maven 方式
  • 番外篇1:在Windows环境下安装JDK
  • 排序算法之--选择排序
  • 前端_面试
  • kubernetes资源对象--ingress
  • 第二十章:异步和文件I/O.(二十三)
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #VERDI# 关于如何查看FSM状态机的方法
  • #vue3 实现前端下载excel文件模板功能
  • #Z2294. 打印树的直径
  • #微信小程序:微信小程序常见的配置传旨
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (八十八)VFL语言初步 - 实现布局
  • (十三)Flask之特殊装饰器详解
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转)平衡树
  • (转载)深入super,看Python如何解决钻石继承难题
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net CHARTING图表控件下载地址
  • .net framework profiles /.net framework 配置
  • 。。。。。
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • @component注解的分类