[Qt Creator 快速入门,霍亚飞 编著,ch1,ch2]
RGB颜色对照表:https://bj.96weixin.com/tools/rgb
1.框架
基础模板(QWidget/QDialog/QMainWindow)
流程1.申明界面上的元素;2.构造所需的控件;3.排版;4.前后台挂接
(1) 排版
垂直QVBoxLayout
水平QHBoxLayout
网格(二维数组)QGridLayout
(2) 信号与槽
public slots: 申明槽函数
Connect(发信号的对象, 信号, 接收信号的对象, 槽函数);
2. 内置部件
按钮(普通,工具栏,单选,复选)
dail 旋钮;
滑动杆slider;
label标签可以显示文字、图片、动画等;
QTextBrowser文本浏览器显示html文本;
Tool Box-工具箱;
Scroll Area-滚动窗口容器;
TabWidget-选项卡-分页显示;
布局管理器主要常用的三个类: QHBoXLayout、 QVBoxLayout、 QGridLayout
QHBOXLayout:水平布局
QVBoxLayout:垂直布局
QGrid Layout:网格布
学习博客
QtGUI学习
鼠标追踪:
//使能鼠标事件追踪(不需长按鼠标键)
//this->setMouseTracking(true);
//处理鼠标事件的虚函数---------------------------------
//鼠标双击
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
qDebug () << "mouse double" << event->pos(); //打印:mouse double
}
//鼠标释放
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
qDebug () << "mouse release" << event->pos();
}
//鼠标移动事件
void Widget::mouseMoveEvent(QMouseEvent *event)
{
qDebug () << "mouse move:" << event->pos(); //左右键都可以
}
3. 信号和槽
特别重要
是对象之间的一种通信机制
信号(Signal)就是在特定情况下被发射的事件
槽(Slot)就是对信号响应的函数。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。
信号与槽关联是用 QObject::connect() 函数实现的,其基本格式是:
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));可以直接写为:
connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
sender 是发射信号的对象的名称,
signal() 是信号名称。
信号可以看做是特殊的函数,需要带括号,有参数时还需要指明参数。
receiver 是接收信号的对象名称,
slot() 是槽函数的名称,需要带括号,有参数时还需要指明参数。
SIGNAL 和 SLOT 是 Qt 的宏,用于指明信号和槽,并将它们的参数转换为相应的字符串。例如,在 samp2_1(前面章节中的项目)的 ui_widget.h 文件中,在 setupUi() 函数中有如下的语句:
QObject::connect(btnClose, SIGNAL(clicked()), Widget, SLOT(close()));
其作用就是将 btnClose 按钮的 clicked() 信号与窗体(Widget)的槽函数 close() 相关联,这样,当单击 btnClose 按钮(就是界面上的“Close”按钮)时,就会执行 Widget 的 close() 槽函数。
一个信号可以连接多个槽,例如:
connect(spinNum, SIGNAL(valueChanged(int)), this, SLOT(addFun(int));
connect(spinNum, SIGNAL(valueChanged(int)), this, SLOT(updateStatus(int));
这是当一个对象 spinNum 的数值发生变化时,所在窗体有两个槽进行响应,一个 addFun()用于计算,一个 updateStatus() 用于更新状态。
当一个信号与多个槽函数关联时,槽函数按照建立连接时的顺序依次执行。
当信号和槽函数带有参数时,在 connect()函数里,要写明参数的类型,但可以不写参数名称。
多个信号可以连接同一个槽,例如让三个选择颜色的 RadioButton的clicked() 信号关联到相同的一个自定义槽函数 setTextFontColor()。
connect(ui->rBtnBlue,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
connect(ui->rBtnRed,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
connect(ui->rBtnBlack,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
当任何一个 RadioButton 被单击时,都会执行 setTextFontColor() 函数。
一个信号可以连接另外一个信号,例如:
connect(spinNum, SIGNAL(valueChanged(int)), this, SIGNAL (refreshInfo(int));
这样,当一个信号发射时,也会发射另外一个信号,实现某些特殊的功能。
严格的情况下,信号与槽的参数个数和类型需要一致,至少信号的参数不能少于槽的参数。如果不匹配,会出现编译错误或运行错误。
在使用信号与槽的类中,必须在类的定义中加入宏 Q_OBJECT。
当一个信号被发射时,与其关联的槽函数通常被立即执行,就像正常调用一个函数一样。只有当信号关联的所有槽函数执行完毕后,才会执行发射信号处后面的代码。