日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

qt学习

發布時間:2024/8/26 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 qt学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QT學習

QT是一個跨平臺的C++圖形用戶界面應用程序框架。提供建立藝術級圖形界面所需的所有功能。完全面向對象的,很容易擴展,并且允許真正的組件編程。

1.創建第一個QT程序


QWidget功能最簡單

main.cpp

#include "mywidget.h"
#include <QApplication>//包含一個應用程序類的頭文件

//main函數入口 argc命令行變量的數量  argv命令行變量的數組
int main(int argc, char *argv[])
{
    //a應用程序對象,在QT中,應用程序對象,有且僅有一個
    QApplication a(argc, argv);
    //w窗口對象 myWidget父類->QWidget
    myWidget w;
    //窗口對象 默認不會顯示 必須要調用show方法顯示窗口
    w.show();
    
    //讓應用程序對象進入消息循環
    //讓代碼阻塞到這行
    return a.exec();
}

.pro文件

#-------------------------------------------------
#
# Project created by QtCreator 2021-02-06T11:16:00
#
#-------------------------------------------------

QT       += core gui  //QT包含的模塊

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets  //大于4版本以上 包含widget模塊

TARGET = 01_project  //目標 生成的.exe名稱
TEMPLATE = app       //模塊 應用程序模板

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

CONFIG += c++11

SOURCES +=             //源文件
        main.cpp 
        mywidget.cpp

HEADERS +=              //頭文件
        mywidget.h

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>//包含頭文件 QWidget窗口類

class myWidget : public QWidget
{
    Q_OBJECT   //宏 允許類中使用信號和槽的機制

public:
    myWidget(QWidget *parent = 0);//構造函數
    ~myWidget();//析構函數
};

#endif // MYWIDGET_H

2.QPushButton創建

第一個按鈕

首先添加一個頭文件

new一個按鈕,并讓按鈕顯示在widget上

可得到如下一個按鈕

添加文本

第二個按鈕

第二種方式創建按鈕

按照控件的大小創建窗口

第二個創建的會將第一個覆蓋,所以要移動

固定窗口大小以及修改窗口名字

3.對象樹

當創建的對象在堆區域的時候,如果指定的父親是QObject派生下來的類或者QObject的子類派生下來的類,可以不用管理釋放的操作,將對象會放入到對象樹中。一定程度上簡化了內存回收機制。

驗證類的釋放操作

新建一個文件

更改成QPushButton為父類:

cpp文件

#include "mypushbutton.h"
#include <QDebug>

MyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent)
{
    qDebug()<<"我的按鈕類構造調用";
}

MyPushButton::~MyPushButton()
{
    qDebug()<<"我的按鈕類析構";
}

h文件

#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H

#include <QPushButton>

class MyPushButton : public QPushButton
{
    Q_OBJECT
public:
    explicit MyPushButton(QWidget *parent = nullptr);

    ~MyPushButton();

signals:

public slots:
};

#endif // MYPUSHBUTTON_H

可以看出析構函數可以在關閉窗口時被自動執行

4.QT中的坐標系

以左上角為原點(0,0),X向右增加,Y向下增加。

對于嵌套窗口,其坐標是相對于父窗口而言的。

5.信號和槽

提出需求:點擊“我自己的按鈕”,關閉窗口

connect(myBtn,&QPushButton::clicked,this,&myWidget::close);
參數1 信號的發送者
參數2 發送的信號(函數的地址)
參數3 信號的接收者
參數4 處理的槽函數(函數的地址)

5.自定義的信號和槽

需求:

設置一個Teacher 老師類 Student 學生類
下課后,老師會觸發一個餓了信號,學生響應信號,請客吃飯

添加兩個文件

teacher.h

signals:
    //自定義信號  寫到signals下
    //返回值是void,只需要聲明,不需要實現
    //可以有參數,可以重載
    void hungry();

student.h

public slots:
    //返回值void,需要聲明,也需要實現
    //可以有參數,可以發生重載
    void treat();

student.cpp

void Student::treat()
{
    qDebug()<<"吃飯";
}

widget.cpp

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //創建一個老師對象
    this->zt=new Teacher(this);

    //創建一個學生對象
    this->st=new Student(this);

    //連接
    connect(zt,&Teacher::hungry,st,&Student::treat);
    classisover();
}
void Widget::classisover()
{
    emit zt->hungry();
}

總結

以上是生活随笔為你收集整理的qt学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。