Qt学习笔记04:创建按钮类--QPushButton

☁️前几天学习Qt没找到好的资源,停了一会,挺难的,比Python的Wx和Tk都要难,昨天晚上去B站找到了资源,还有脚本之家的一些文档还有C语言中文网的。

资源:

我决定从代码入手,不适用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;
}

说的有问题?联系我:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章