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

统计助手小程序怎么制作株洲seo优化高手

统计助手小程序怎么制作,株洲seo优化高手,etc推广代理平台,做一个类似微博的网站需要怎麼做目录 一、显示hello world1.1 图形化界面1.2 写代码 二、对象树三、使用输入框显示hello world四、使用按钮显示hello world 一、显示hello world 有两种方式实现hello world: 通过图形化界面,在界面上创建出一个控件,显示hello world通过写…

目录

  • 一、显示hello world
    • 1.1 图形化界面
    • 1.2 写代码
  • 二、对象树
  • 三、使用输入框显示hello world
  • 四、使用按钮显示hello world

一、显示hello world

有两种方式实现hello world:

  • 通过图形化界面,在界面上创建出一个控件,显示hello world
  • 通过写代码的方式,创建控件,显示hello world

1.1 图形化界面

点击widget.ui文件,进入界面设计。左边找到Label标签,鼠标点中拖到框框里面,然后写hello world
在这里插入图片描述
注意:框框里面写了hello world后,在source文件夹的main.cpp和widget.cpp文件内容是没有变化的,变化的是.ui文件

在这里插入图片描述
点击左下角的三角形按钮,运行:
在这里插入图片描述

同时在右上角发现,多了一个控件:
在这里插入图片描述

刚刚我们写了hello world的内容,ui文件就会在xml中多出来一段代码,qmake就会在编译项目的时候,基于这段代码生成一段C++代码,然后通过这段C++代码构建出界面内容(这是自动完成的,不需要手动)

1.2 写代码

写代码的位置:在widget.cpp文件中

#include "widget.h"
#include "ui_widget.h"
#include <QLabel>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel* label = new QLabel(this);// QLabel label;label->setText("hello world");
}Widget::~Widget()
{delete ui;
}
  • 注意要记得带上头文件#include < QLabel>
  • QLabel可以在对堆上创建对象,也可以在栈上创建对象,一般用堆更好些
  • QLabel对象的小括号中的this表示指明父类(Widget w)
  • 对象的方法的setText填入要显示的文本内容,可以直接用C风格字符串(C格式字符串会隐式构造成QString对象)

由于Qt出现的比较早,当时还没有C++的标准库,所以Qt为了自己的开发能够流畅,也有自己的一套轮子,包括:字符串QString、QVector、QList、QMap等等。但是现在QString和std::string是可以相互转换的,相比而言,QString稍微好点,因为它内部的已经对于字符编码做了处理。

运行:
在这里插入图片描述

二、对象树

上面的代码有一些“问题”,在C++中,我们写代码new出来的对象最后都要释放,否则会内存泄漏,可是这里的代码并没有显示去释放它。

其实在Qt中,不会产生内存泄漏问题,label对象会在合适的时候被析构释放,之所以能够被释放,是因为这个对象被挂到了对象树上(与参数的this有关)

这个对象树是一个N叉树,会把界面上的各种元素(控件对象)组织起来,然后统一进行释放,合适的时候:窗口关闭

前面说通过new更好,是为了把这个对象的生命周期交给Qt的对象树进行管理,如果是栈就不行了,可能存在提起释放问题(出了作用域对象就销毁了,导致最后要显示的内容没有显示出来)

验证堆上能够自动释放:
这里我们自定义一个MyLabel类,只要MyLabel类的析构函数执行到了,此时窗口就会销毁,自动把对象树上的所有对象销毁

mylabel.h文件:

#ifndef MYLABEL_H
#define MYLABEL_H#include <QLabel>class MyLabel : public QLabel
{
public:// 构造函数使用QWidget*版本的// 这样才能确保对象加到对象树上MyLabel(QWidget* parent);~MyLabel();
};#endif // MYLABEL_H

mylabel.cpp文件:

#include "mylabel.h"
#include <iostream>MyLabel::MyLabel(QWidget* parent):QLabel(parent)
{}MyLabel::~MyLabel()
{std::cout << "mylabel已销毁" << std::endl;
}

widget.cpp文件:

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

运行:在这里插入图片描述
出现了乱码问题。

解决方法:使用Qt提供的qDebug() 工具,可以完成日志打印工作,处理好编码格式问题

#include "mylabel.h"
#include <iostream>#include <QDebug>MyLabel::MyLabel(QWidget* parent):QLabel(parent)
{}MyLabel::~MyLabel()
{qDebug() << "MyLabel 已销毁";
}

运行:
在这里插入图片描述
后续尽量使用qDebug 来打印输出信息

三、使用输入框显示hello world

使用单行编辑框 QLineEdit 完成

两种方式:界面和代码

在这里插入图片描述

代码:

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

在这里插入图片描述

四、使用按钮显示hello world

在这里插入图片描述
按钮是可以点击的,但是需要Qt中的信号槽机制。本质是给按钮的点击操作设置一个处理函数,当点击时,就会执行这个处理函数

代码:

#include "widget.h"
#include "ui_widget.h"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函数:

  • ui->pushButton:谁发出信号
  • &QPushButton::clicked:发出什么信号,点击按钮就会触发这个信号
  • &Widget::handleClick:处理函数

别忘了在widget.h文件声明处理函数:
在这里插入图片描述
运行,点击按钮,内容从hello world变成hello qt,再点击,从hello qt变成hello world

在这里插入图片描述

在这里插入图片描述

下面用代码的方式来实现按钮显示hello world

代码:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);myp = new QPushButton(this);myp->setText("hello world");connect(myp, &QPushButton::clicked, this, &Widget::handleClick);
}Widget::~Widget()
{delete ui;
}void Widget::handleClick()
{// 当按钮被点击时,就把按钮的内容进行替换if(myp->text() == QString("hello world")){myp->setText("hello qt");}else {myp->setText("hello world");}
}

在这里插入图片描述
运行效果与前面一样

http://www.dtcms.com/a/563195.html

相关文章:

  • 做win精简系统的网站js弹出网站
  • 网站开发环境包括什么网站建设+荆州
  • 网站建设案例图片定西兰州网站建设
  • 湘潭做网站优化初中做历史的网站
  • 网站国际化怎么做网站程序文件
  • 兖州建设局网站燕莎做网站
  • 西安官网seo公司网络优化大师app
  • 摄像头监控视频怎么做直播网站wordpress 放大镜插件
  • 网站开发代码用什么软件wordpress数据库怎么设置
  • 在iis里面创建网站洛阳建设银行官方网站
  • 全国新农村建设网站做导航网站备案
  • 电子商务网站建设期中广东建设工程质量安全协会网站
  • 北京海淀公司注册张家界seo
  • 广州专业手机网站建设做网站怎么做呀
  • 贵州建设厅考试网站二建成绩查询xml做网站
  • 为什么网站权重会掉网站开发免费
  • 网站建设需求确认书平台网站建设意见征求表
  • 网站专题二级页怎么做免费制作个人网站的软件
  • 阿里云建设网站好不好网络架构1788
  • 电脑上不了建设厅网站wordpress移动端投放广告
  • 陕西网站制阿里云中英文网站建设
  • 全国哪几家做5G网站公司网站推广常用的方法
  • php做的网站 订单系统开发工具包
  • mip网站有什么好处中国建设银行手机银行下载官方网站
  • 东莞市做网站公司网站建设html代码优化
  • 永康市建设银行网站查询wordpress 不发布文章
  • 做网站还要写文章吗微信微网站是什么
  • 怎么建立一个博客网站手机壁纸网站大全
  • 哈尔滨 网站建设公司阿里 网站建设方案书 模板
  • 达州市网站建设网站建设结构表