- 创建有窗口类:
myWidget
基类有三种选择:
QWidget/QMainWidget/QDialog
,窗口/有菜单栏窗口/对话框1
2
3
4
5
6
7int main(int argc, char *argv[]) //argc命令行变量的数量,argv命令行变量数组
{
QApplication a(argc, argv); //在QT中应用程序对象有且仅有一个
MainWindow w; //窗口对象
w.show(); //显示对象
return a.exec(); //代码阻塞到当前行
}pro工程文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15QT += core gui #Qt包含的模块,核心和图形,如udp和tcp在network中
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets #大于4版本的Qt包含Widget模块
CONFIG += c++11
SOURCES += \ #源文件
main.cpp \
mainwindow.cpp
HEADERS += \ #头文件
mainwindow.h
FORMS += \
mainwindow.ui自动对齐command+i,切换同名.cpp和.h F4
- 按钮控件头文件
#include <QPushButton>
设置按钮和窗口大小与标题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
QPushButton * b1 = new QPushButton;
//b1->show(); //以顶层的方式弹出窗口控件
b1->setParent(this); //按钮依赖于当前Widget窗口
b1->setText("new button1");
QPushButton * b2 = new QPushButton("new button2", this);
b2->move(100, 100); //移动按钮,坐标
b2->resize(1,1);//按钮重置大小
resize(800,600); //设置窗口大小
setFixedSize(800,600); //固定窗口大小
setWindowTitle("the First Window"); //命名窗口标题
}
Widget::~Widget()
{
delete ui;
}按钮控件常用api
1
2
3setParent(this);//设置父亲
setText("123");设置文本
move()
对象数模型
- 创建对象时,这个对象会自动添加到其父对象的children()列表
- 当父对象析构时,会清除掉列表中的所有对象都会被析构
- 当创建的对象在堆区的时候,如果指定的父亲是QObject派生下来的类,或者是QObject子类派生下来的类,可以不用管理释放操作,将对象放入对象树中
信号和槽
- 信号槽松散耦合,信号端和接收端没有关联,通过connect函数连接
信号函数
1
2
3
4
5
6
7void clicked() //点击
void pressed() //按下
void released() //松开
void toggled(bool checked) //状态改变
//connect(信号发送端,信号函数地址,信号接收端,信号函数地址);
connect(myBtn, &QPushButton::clicked, this, &QWidget::close); //点击按钮关闭窗口
disconnect(t, teacherSingal, s, studentSlot); //断开信号自定义信号写在signals下,返回值为void,可以有参数,只需要声明,不需要实现
- 触发自定义信号 emit
- 一个信号可以连接多个槽函数,多个信号可以连接同一个槽函数
- 信号和槽的参数类型类型必须一一对应,信号参数的个数可以多余槽函数的参数个数
Lambda表达式 {}
- Lambda表达式用于创建匿名函数,[]标识一个lambda的开始,不能省略
- []为空,表示没有任何参数
- [=]函数体内可以使用Lambda所在作用范围内所有可见的局部变量,并且是值传递
- [&]引用传递
- [a]按a值传递
- [&a]按a的引用传递
- ()标识重载,没有参数时可以省略,参数传递方式与[]一致
- mutable修饰符,可以修改按值传递的拷贝,
[m]()mutable{m=1+1, qDebug()<<m; };
- 函数返回值类型
[]()->int{return 1;}
- {}函数体
1 | //示例代码 |