QT:一个由C++编写的跨平台的图形化用户界面应用程序框架。
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowTitle("Hello World");
}
hello world
Widget::~Widget() { delete ui; }
Qapplication a(argc, argv);
Widgt w;
w.show();
a.exec();
return 0;
信号和槽
信号由signals关键字声明
信号就是函数的声明,只需声明,不用实现
信号无返回值,但可以有参数,信号和槽的参数列表顺序要一致
信号可以重载
使用 emit 发射信号
一个信号可以连接多个槽函数(槽函数执行顺序时随机的)
一个槽函数可以被多个信号连接
槽函数可以时lambda表达式
信号可以连接信号
可以使用disconnect断开信号和槽的连接
QObject* QObject::sender() 可获得信号发送者,需强制类型转换
内存回收机制
- 需指定父对象
- 需直接或间接继承QObject
- 子对象使用new后可以不用delete,Qt会自
Qt 窗口系统
菜单、工具、状态栏
QmenuBAR menu_bar = menuBar();
Qmenu *file = menu_bar->addmenu("文件);
Qaction *action_new = file->addaction("新建");
connect(action_new, &QACTION::TRIGEERED, [](){QDEBUG() << "新建 被触发"});
file->addseparator();
// 模拟对话框
QDialog dlg;
dlg.exec() ; 阻塞线程 直到结束
常用控件:
Qt 事件系统
事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的统称。
Qt使用一个对象代表一个事件,所有事件类都继承于 QEvent。
在Qt中任何QObject的子类实例都可以接收和处理事件
QApplication对象通过调用 exec() 开始Qt事件循环来监听应用程序的事件,当有事件发生时,Qt 会产生一个与之对应的事件对象(QEvent子类实例)。Qt 会将这个事件对象传递给QObject的 event(),该函数按照事件对象的类型将对象给相应的处理函数 /(注:这些处理函数都是虚函数,需要继承实现)
重写部件事件处理函数
例如: keyPressEvent()、mousePressEvent()等, 该方法只用于处理特定部件的的特定事件
重写event()
QObject::event() 可以在事件到达默认处理函数之前获得该事件,用于事件的分发
2.1 GUI层
这里我们由于基于Qt的,所以这一层都是用Qt的类库来实现了,所有的主界面都会从这三个类:QWiget,QMainWindow,QDialog中的一个继承而来,并在main函数里生成实例并show出来,进入主消息循环。我本人习惯于使用QWiget,不使用UI文件,所有的界面都new出来,再使用代码来布局。