Qt学习笔记04:创建按钮类--QPushButton
☁️前几天学习Qt没找到好的资源,停了一会,挺难的,比Python的Wx和Tk都要难,昨天晚上去B站找到了资源,还有脚本之家的一些文档还有C语言中文网的。
资源:
- 哔哩哔哩:https://www.bilibili.com/video/BV1g4411H78N?p=6看得人挺多
- C语言中文网:http://c.biancheng.net/qt/
- 脚本之家:http://shouce.jb51.net/qt-beginning/
我决定从代码入手,不适用UI界面,如果你们不想看就可以下一片了,不过我相信我讲的很详细😸,因为直接拖拽是已经学明白了的大佬才敢的事,毕竟相对比代码简单对吧?
今天我打算学习按钮,首先打开QC(把Qt Creator简写QC)
选择Qmake项目
记住,在选择Details中选择Qwidget
名称写上myWidget,其实随便,你想怎的就怎的!
首先,我们需要创建一个按钮,怎么创建?打开myWidget.cpp文件,通常在这里写,然后我们应该先了解一下按钮的构造……坐稳了,比较有用💥
Qt中(C++中)的每一个组件都是一个类,每一个方法都在类里面,所谓万物皆对象,像按钮就是一个类,叫QPushButton
,区分大小写,那么QPushButton也有一个父类,打开Qt终端,是一个软件,长这样
打开输入Assistant打开Qt助手,搜索QPushButton,就可以找到QPushButton的信息
看见了吧,这写着呢:QPushButton是一个类(QPushButton Class)
Header就是头文件,说明引入QPushButton需要#include <QPushButton>
,qmake就是需要widgets类,那么重要的是Inherits:这是告诉你这个类有没有父类,并告诉你是什么,这里写的是QAbstractButton,我才是一个按钮类,然后点击就可以查看QAbstractButton的父类
这是QABstractButton的父类:QWidget类,那么Qwidget类有没有父类?有!QObject,QObject就没有父类了,那么QObject就是根类,这是祖宗啦!
类这个东西很神奇,比如创建项目的时候,是不是要选择QMainWindow还是QWidget还是Qdialog?这也是三个类,它们也存在继承关系,关系如下:
所以说QMainWindow和Qdialog继承了QWidget类,不信你在Qt助手查QMainWindow,它的父类就是QWidget。
好了,来说说弄一个按钮!
我想大家已经忘了我刚才说的话了,再重复一遍:“首先,我们需要创建一个按钮,怎么创建?打开myWidget.cpp文件,通常在这里写”
然后呢那就得引入#include <QPushButton>
对吧,然后在函数中写
//创建一个按钮
QPushButton * btn = new QPushButton;
这是创建一个按钮的语句
myWidget.cpp代码是这样:
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QPushButton>
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::myWidget)
{
//创建一个按钮
QPushButton * btn = new QPushButton;
//显示按钮
btn->show();
ui->setupUi(this);
}
myWidget::~myWidget()
{
delete ui;
}
你运行一下试试?点击左下角的绿色三角,不用点击带虫子的那个。
如果你的程序报错,显示Error while building/deploying project dict-qt (kit: Desktop Qt 5.10.0 Mi…
,不慌,是因为你的文件路径有中文,很可惜你只能删掉重来……
结果是不是什么都没有😜(要是有就见鬼了)那是因为你只是创建了一个对不对?但是没有显示出来,所以我们要加一个语句,btn->show()
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QPushButton>
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::myWidget)
{
//创建一个按钮
QPushButton * btn = new QPushButton;
//显示按钮
btn->show();
ui->setupUi(this);
}
myWidget::~myWidget()
{
delete ui;
}
你再运行试试,还是没有?那不可能!效果应该是这样
🈂️EXO ME!💥怎么会这样?因为你没有语句限定它在主窗体中,那么show的功能是顶层方式弹出窗口控件,所以不能要这个
把这一句改成btn->setParent(this)
,this是一个特殊的指针,指向自己这个对象(听起来怪怪的)
再试试就行了
但是按钮太小而且啥也没有,怎么办?别慌离结束还早这呢!
我们要设置文本,一般设置就是set,那么这个方法叫做setText(char*)
很简单
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QPushButton>
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::myWidget)
{
//创建一个按钮
QPushButton * btn = new QPushButton;
//显示按钮
//btn->show();顶层弹出
btn->setParent(this);
btn->setText("第一个按钮");
ui->setupUi(this);
}
myWidget::~myWidget()
{
delete ui;
}
那么有没有觉得光是创建一个按钮就这么麻烦,别着急,都帮你想好了嘛,可以简化的,来试试这个
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QPushButton>
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::myWidget)
{
/*
//创建一个按钮
QPushButton * btn = new QPushButton;
//显示按钮
//btn->show();顶层弹出
btn->setParent(this);
btn->setText("第一个按钮");
*/
QPushButton * btn2 = new QPushButton("第二个按钮", this);
ui->setupUi(this);
}
myWidget::~myWidget()
{
delete ui;
}
可以直接设置在定义中,但是如果是Qt版本较低的话这样有一个弊端,就是窗口会和控件一样大,我没事
但是这样也不是不好,那我们可以设置窗口的大小嘛,其实这个函数STL中都见过,就是resize()
,vector的重新设置长度是不是就是这样呢?
构造是这样的
resize(w, h); //w->width, h->height长宽
写在代码中就行了,我不演示了
再假如你把第一个按钮的程序取消注释,再次运行,是不是没变化?是因为第二个按钮覆盖了它,所以你需要把第二个按钮放到另一个位置,用move()
函数
move的构造:
move(int ax, int ay); //坐标x,y
代码:
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QPushButton>
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::myWidget)
{
//创建一个按钮
QPushButton * btn = new QPushButton;
//显示按钮
//btn->show();顶层弹出
btn->setParent(this);
btn->setText("第一个按钮");
QPushButton * btn2 = new QPushButton("第二个按钮", this);
//移动btn2
btn2->move(100, 100);
ui->setupUi(this);
}
myWidget::~myWidget()
{
delete ui;
}
—————————————————
行了,按钮就说到这,那么我说两个小知识
1、修改窗口标题
我们看到窗口有一个标题,可不可以修改?可以,用setwindowTitle()
比如:
//title
setWindowTitle("hello Qt");
2、设置固定窗口大小,用户无法拖拽
比如设置窗口就是600*400,那么用户就不能缩小放大了
//setFixedSize
setFixedSize(600, 400);
两个一起实例
这样子窗口无法修改,标题也设置成功了
最后献上代码:
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QPushButton>
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::myWidget)
{
//创建一个按钮
QPushButton * btn = new QPushButton;
//显示按钮
//btn->show();顶层弹出
btn->setParent(this);
btn->setText("第一个按钮");
QPushButton * btn2 = new QPushButton("第二个按钮", this);
//移动btn2
btn2->move(100, 100);
//setFixedSize
setFixedSize(600, 400);
//title
setWindowTitle("hello Qt");
}
myWidget::~myWidget()
{
delete ui;
}
说的有问题?联系我:
- 📧邮箱:3392446642@qq.com
- 🐱Github:https://github.com/github-programer
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· Supergateway:MCP服务器的远程调试与集成工具
· C# 13 中的新增功能实操