(二)Qt窗口應用程序Widget


 

 

QMainWindow,QWidget,QDialog,這三基類都可以作為頂層窗口

QWidget:是所有窗口類的父類,功能最簡單

QMainWindow:如果窗口需要菜單欄,工具欄,狀態欄,就需要QMainWindow

QDialog:對話框窗口,最顯著的特點:右上角只有一個關閉按鈕

 

main.cpp 

應用程序類和窗口類是Qt程序必須的兩個類

#include "mywidget.h"
// qt中類名和頭文件名一樣, 而且沒有.h
#include <QApplication>

// 應用程序入口
int main(int argc, char *argv[])
{
    // 應用程序類, 每一個qt程序中有且只有一個
    // 窗口執行起來之后,應用程序類進入一個消息循壞,不斷捕捉事件
    QApplication a(argc, argv);
    // 窗口類, 創建出來之后默認不顯示
    MyWidget w; // 頂層窗口
    // 顯示窗口
    w.show();

    return a.exec(); // a 即應用程序類
}

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QPushButton>

class MyWidget : public QWidget
{
    Q_OBJECT    // 如果使用信號和槽, 必須添加這個宏

public:
    MyWidget(QWidget *parent = 0);
    ~MyWidget();

private:
    QPushButton b1;
    QPushButton *b2;
};

#endif // MYWIDGET_H

HelloQt.pro文件

#-------------------------------------------------
#
# Project created by QtCreator 2016-03-04T10:09:29
#
#-------------------------------------------------

QT       += core gui # qt程序用到哪些模塊
# 兼容以前的版本,qt5 以取沒有widgets模塊,只有gui模塊,qt5 從gui中分離出widgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

# 生成的應用程序的名字
TARGET = 123
# 指定生成的makefile的類型 lib
TEMPLATE = app

# 源文件 \ 換行
SOURCES += main.cpp\
        mywidget.cpp \
    mybutton.cpp

# 頭文件

HEADERS += \
    mybutton.h \
    mywidget.h

CONFIG += c++11

 

mywidget.cpp

#include "mywidget.h"
#include "mybutton.h"   // 自定義類頭文件

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    /*
     * 如果窗口需要依附另外一個窗口, 需要給該窗口指定父類
     * 父窗口顯示的時候,子窗口也會隨之顯示
    */
    // 初始化
    b2 = new QPushButton("hello, qt", this);
    // b2->setText("hello, qt");
    // b2->show();

    b1.setParent(this);
    b1.setText("我是老二");

    // 改變位置 -- 移動
    // 窗口坐標系 原點:左上角 x:向右遞增, y 向下遞增
    b1.move(100, 100);
    b1.resize(50, 50);

    // 內存自動回收
    // 1. 從QObject派生的類 1.直接 2.間接
    // 2. 指定父類, 父親析構的時候,先析構他的孩子

    // 創建自定義按鈕對象
    MyButton* btn = new MyButton(this);
    btn->setText("wo shi mybutton");

    // 設置窗口標題
    this->setWindowTitle("明天就要離開中騰....");
    // this->resize(200, 300);
    this->setFixedSize(200, 300);
    this->setWindowIcon(QIcon("D:\\Luffy.png"));

    // 需求 b1 關閉窗口
    // connect(b1, 發出的信號, this, 處理信號的槽函數);
    connect(&b1, &QPushButton::clicked, this, &MyWidget::close);
    /*
     * b1: 信號的發出者, 此參數是一個指針
     * &QPushButton::clicked: 信號發出者, 內部的一個信號
     *      格式:  & + 信號發出者類的名字 + :: + 信號的名字
     * this: 信號的接收者, 此參數是一個指針
     * &MyWidget::close: 信號的處理函數, 屬於this
    */

}

MyWidget::~MyWidget()
{

}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM