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