• QT编程实例:Hello Qt


    .pro文件

    .pro就是工程文件(project),它是qmake自动生成的用于生产makefile的配置文件

    HelloQt.pro

    #-------------------------------------------------
    #
    # Project created by QtCreator 2016-03-04T10:09:29
    #
    #-------------------------------------------------
    
    QT       += core gui
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    # 生成的应用程序的名字
    TARGET = 123
    # 指定生成的makefile的类型
    TEMPLATE = app
    
    # 源文件
    SOURCES += main.cpp
            mywidget.cpp 
        mybutton.cpp
    
    # 头文件
    
    HEADERS +=  mybutton.h 
        mywidget.h

    头文件

    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

    mybutton.h

    #ifndef MYBUTTON_H
    #define MYBUTTON_H
    
    #include <QPushButton>
    
    class MyButton : public QPushButton
    {
        Q_OBJECT
    public:
        explicit MyButton(QWidget *parent = 0);
        ~MyButton();
    
    signals:
    
    public slots:
    };
    
    #endif // MYBUTTON_H

    源文件

    main.cpp

    #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.exec():

    程序进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。

    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()
    {
    
    }

    mybutton.cpp

    #include "mybutton.h"
    #include <QDebug>
    
    MyButton::MyButton(QWidget *parent) : QPushButton(parent)
    {
    
    }
    
    MyButton::~MyButton()
    {
        qDebug() << "this is mybutton!";
    }
  • 相关阅读:
    编程算法
    JDBC连接MySQL数据库及演示样例
    CKEditor&ckfindtor
    从零開始开发Android版2048 (五) 撤销的实现
    TCP/IP之分层
    poj2239 Selecting Courses --- 二分图最大匹配
    英尺到米的换算
    概率dp ZOJ 3640
    Android应用程序注冊广播接收器(registerReceiver)的过程分析
    TsFltMgr.sys系统蓝屏的原因就在于QQ电脑管家!
  • 原文地址:https://www.cnblogs.com/xumaomao/p/12318662.html
Copyright © 2020-2023  润新知