命名规范
快捷键
ctrl + /
ctrl + r
ctrl + b
ctrl + f
F1
ctrl + i
F4
按钮常用API
show()
以顶层方式弹出窗口控件setParent()
选择依赖方式setText()
设置文本resize()
重置窗口大小move()
移动setWindowTitle()
设置窗口大小setFixedSize()
设置固定窗口大小在Qt中创建一个对象时,需要提供一个Parent对象指针。下面解释这个Parent对象指针的作用:
(1)QObject是以对象树的形式组织起来
1. 当创建一个QObject对象时,会看到QObject对象的构造函数接收一个父对象指针parent。也就是说,我们在创建一个对象时,提供一个父对象指针,我们创建的这个对象会自动添加到父对象的children()列表。
2. 当父对象析构时,这个列表中的所有对象也会被析构。仔细想一下,这种设计理念十分合理。比如说,我们创建了一个按钮,按钮有一个快捷键对象作为其子对象,当我们删除按钮时,这个按钮的快捷键理应删除。
当创建的对象在堆区的时候,如果指定的父亲是QObject 派生下来的类或者子类派生下来的类,可以不需要管理释放操作,会将对象放入对象树一定程度上简化了内存回收机制
(1) 基本语法
connect( 信号的发送者(指针)
,信号
, 信号的接受者(指针)
,信号的处理[槽函数]
)
(2)信号槽的优点 松散耦合
信号发送端 和 接收端本身是没有关联的,通过connect连接,将两者耦合在一起
事件:点击按钮,关闭主窗口
connect(btn,&QPushButton::clicked,this,&QWidget::close)
信号关键字:Signals
以QPushButton为例:
clicked(bool) 点击
pressed() 按下
released() 释放
toggled(bool) 切换状态
槽的关键字:Slots
(3)自定义信号和槽位函数
自定义信号
* 写在类的signals下,返回值为void,可以有参数,支持重载,不需要实现
自定义槽函数
(1)不能写在signals下,public slots[公共的槽函数] 5.4版本以后全局函数或者public都行
(2)返回值也是void,需要声明,也需要实现,可以有参数,支持重载。
使用用法: 首先用connect连接信号和槽, 触发信号 emit
+ 信号和槽函数的重载,需要函数指针,明确指向函数的地址
void (Teacher:: *teacherSignal)(QString) = &Teacher::hungry;
void (Student:: *studentSlot)(QString)=&Student::treat;
QString
类型的变量转为char *
要使用.toUtf8().data()
,例如:foodName.toUtf8().data()示例
//信号-老师饿了,槽函数-学生请客
void (Teacher:: *teacherSignal)(QString) = &Teacher::hungry;
void (Student:: *studentSlot)(QString)=&Student::treat;
disconnect(parameters list)
,参数列表与connect一样Lambda表达式是C++11版本特性,在.pro文件中用CONFIG += c++11
表示使用,Lambda表达式是匿名函数对象。
基本语法:
[capture](parameters) mutable ->return-type{statement}
1. [capture]:捕捉列表。捕捉列表总是出现在Lambda函数的开始处。捕捉列表描述了上下文中哪些数据可以被Lambda使用,
以及使用方式(以值传递的方式或引用传递的方式)。
1). [var]表示值传递方式捕捉变量var;
2). [=]表示值传递方式捕捉所有父作用域的变量(包括this);
3). &var]表示引用传递捕捉变量var;
4). [&]表示引用传递方式捕捉所有父作用域的变量(包括this);
5). [this]表示值传递方式捕捉当前的this指针。
2. (parameters):参数列表。与普通函数的参数列表一致。如果不需要参数传递,则可以连同括号“()”一起省略;
3. mutable:mutable修饰符。默认情况下,Lambda函数总是一个const函数,mutable可以取消其常量性。
4. ->return-type:返回类型。用追踪返回类型形式声明函数的返回类型。我们可以在不需要返回值的时候也可以连同符号”->”一起省略。
此外,在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导;
5. {statement}:函数体。内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有捕获的变量。
示例代码:
#include
using namespace std;
int main()
{
int j = 10;
auto by_val_lambda = [=]{ return j + 1; };
auto by_ref_lambda = [&]{ return j + 1; };
cout<<"by_val_lambda: "<
* 菜单栏最多只能有一个
+ QMenuBar * bar = menuBar(); setMenuBar(bar);
+ 创建菜单
* QMenu * fileMenu = bar->addMenu("文件");
+ 创建菜单栏目
* QAction * newAction = fileMenu->addAction("新建");
+ 添加分隔符
* fileMenu->addSeparator();
* 工具栏可以有多个
+ QToolBar * toolBar = new QToolBar(this);
+ addToolBar(toolBar);
* 可选参数 默认停靠范围
+ addToolBar(Qt::BottomToolBarArea,toolBar);
* 只允许左右停靠
+ toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
* 取消浮动
+ toolBar->setFloatable(false);
* 设置禁止移动
+ toolBar->setMovable(false);
* 给工具栏设置栏目
+ toolBar->addAction("绝了"或者QAction);
* 给工具栏添加控件
+ toolBar->addWidget(QPushButton按钮);
* 状态栏最多只能有一个
+ QStatusBar * stBar = statusBar();
+ setStatusBar(stBar);
* 添加标签控件
+ QLabel * label = new QLabel("左侧提示的信息",this);
+ QLabel * label1 = new QLabel("右侧提示的信息",this);
+ stBar->addWidget(label);
+ stBar->addPermanentWidget(label1);
* 铆接部件可以有多个
+ QDockWidget * dockWidget = new QDockWidget("浮动",this);
+ addDockWidget(Qt::BottomDockWidgetArea,dockWidget); 放置位置下面 如果没有中心部件默认占满
+ 只允许上下
* dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
* 中心内容也只能有一个
+ 文本窗口 QTextEdit
+ QTextEdit * edit = new QTextEdit(this);
+ setCentralWidget(edit); //设置中心部件
+ 只能有一个的是set 可以允许多个是add
鼠标事件
定时器 QTimeEvent
event事件分发器
事件过滤器
//winLabel 你要对那个组件使用动画 geometry几何结构
QPropertyAnimation * an = new QPropertyAnimation(winLabel,“geometry”);
//动画时间
an->setDuration(1000);
//动画开始
an->setStartValue(QRect(winLabel->x(),winLabel->y(),winLabel->width(),winLabel->height()));
//动画结束
an->setEndValue(QRect(winLabel->x(),winLabel->y() + 300,winLabel->width(),winLabel->height()));
//动画方式
an->setEasingCurve(QEasingCurve::OutBounce);
an->start();
[https://www.bilibili.com/video/BV1g4411H78N?p=63&spm_id_from=pageDriver]: