☁️前幾天學習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