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;
}

說的有問題?聯繫我:

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