一、创建第一个Qt程序
1. 点击创建项目后,选择项目路径以及给项目起名称
名称:不能有中文、不能有空格
路径:不能有中文路径
2. 默认创建有窗口类myWidget,基类有三种选择:QWidget、QMainWindow、QDialog
3. main函数
QApplication a() 应用程序对象,有且仅有一个myWidget w; 实例化窗口对象
w.show(); 调用show函数显示窗口
return a.exec(); 让应用程序对象进入消息循环机制中,代码阻塞到当前行
#include "mywidget.h"#include <QApplication>//包含一个应用程序类的头文件//main程序入口 argc命令行变量数量 argv命令行变量的数组
int main(int argc, char *argv[])
{//a应用程序对象,在QT中,应用程序对象有且仅有一个QApplication a(argc, argv);//窗口对象 myWidget父类 -> QWidgetmyWidget w;//窗口对象 默认不会显示,必须调用show方法显示窗口w.show();//让应用程序对象进入消息循环,阻塞在这行return a.exec();// while(true)
// {
// if(点击叉子)
// {
// break;
// }
// }}
二、命名规范及快捷键
命名规范:
类名 首字母大写,单词和单词之间首字母大写
函数名 变量名称 首字母小写,单词和单词之间首字母大写
快捷键:
注释 ctrl + /
运行 ctrl + r
编译 ctrl + b
字体缩放 ctrl + 鼠标滚轮
查找 ctrl + f
整行移动 ctrl + shift ↑或者↓
自动对齐 ctrl + i
同名之间的.h和.cpp切换 F4
帮助文档 第一种方式F1 第二种:左侧按钮 第三种:绝对路径
三、QPushButton创建
按钮控件常用API:
创建QPushbutton *btn= new QPushbutton
设置父亲 setParent(this)
设置文本 setText("文字")
设置位置 move(宽,高)
重新指定窗口大小 resize设置窗口标题 setWindowTitle
设置窗口固定大小 setFixedSize
myWidget::myWidget(QWidget *parent):QMainWindow(parent)
{//创建一个按钮QPushButton *btn = new QPushButton;//btn->show();//show以顶层方式弹出窗口控件//让btn对象 依赖在myWidget窗口中btn->setParent(this);//显示文本btn->setText("第一个按钮");//按钮重新指定大小btn->resize(100,30);//创建第二个按钮 按照控件的大小创建窗口QPushButton *btn2 = new QPushButton("第二个按钮",this);//移动btn2按钮btn2->move(100,100);//重置窗口大小resize(600,400);//设置固定窗口大小setFixedSize(600,400);//设置窗口标题setWindowTitle("第一个窗口");}
四、对象模型(对象树)
当创建的对象在堆区时,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,会将对象放入到对象树中。
一定程度上简化了内存回收机制。
mypushbutton.h
#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H#include <QPushButton>class MyPushButton : public QPushButton
{Q_OBJECT
public:explicit MyPushButton(QWidget *parent = nullptr);~MyPushButton();signals:};#endif // MYPUSHBUTTON_H
mypushbutton.cpp
#include "mypushbutton.h"
#include<QDebug>MyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent)
{qDebug()<<"我的按钮类构造调用";
}
MyPushButton::~MyPushButton()
{qDebug()<<"我的按钮类析构";
}
mywidget.cpp
#include "mywidget.h"
#include"QPushButton" //按钮控制的头文件
#include"mypushbutton.h"
#include<QDebug>myWidget::myWidget(QWidget *parent):QMainWindow(parent)
{//创建一个按钮QPushButton *btn = new QPushButton;//btn->show();//show以顶层方式弹出窗口控件//让btn对象 依赖在myWidget窗口中btn->setParent(this);//显示文本btn->setText("第一个按钮");//按钮重新指定大小btn->resize(100,30);//创建第二个按钮 按照控件的大小创建窗口QPushButton *btn2 = new QPushButton("第二个按钮",this);//移动btn2按钮btn2->move(100,100);//重置窗口大小resize(600,400);//设置固定窗口大小setFixedSize(600,400);//设置窗口标题setWindowTitle("第一个窗口");//创建一个自己的按钮对象MyPushButton *myBtn = new MyPushButton;myBtn->setText("我自己的按钮");myBtn->move(200,0);myBtn->setParent(this);//设置到对象树中myBtn.resize(100,30);
}myWidget::~myWidget()
{qDebug()<<"myWidget的析构调用";
}
输出:
底层逻辑:先析构我的按钮类再析构myWidget,只是打印顺序置为反
我的按钮类构造调用
myWidget的析构调用
我的按钮类析构
五、Qt中的坐标系
左上角为(0,0)点
x以右为正方向
y以下为正方向