一、自定义信号和槽
1、信号和槽必须定义在类中
2、自定义信号和槽必须继承QObject
3、在类的开头写上 Q_OBJECT 没有分号,此标识必须写在项目构建之前,如果是后加上的,必须重新构建项目
4、信号定义signals: 关键字下面。
5、通过emit 发送信号
6、一个信号可以连接多个槽,当该信号发射会触发多个槽函数
7、多个信号可同时连接一个槽,只要有一个信号发射就会触发槽函数
注意:如果正确使用信号与槽机制,同时没有语法错误;但是编译时仍然报错,这时可以尝试把编译出的build*文件整个删除,然后再次编译。(有时是编译过的build文件对信号与槽机制有影响)
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
btn = new QPushButton(this);
btn->setText("单击");
btn->resize(80,40);
btn->move(200,200);
connect(btn,SIGNAL(clicked()),this,SLOT(slots_func())); //按钮单击,触发槽函数
connect(this,SIGNAL(signal_func(int)),this,SLOT(slots_func(int))); //绑定自定义信号和槽函数
connect(this,SIGNAL(signal_func(int)),this,SLOT(close()));
}
MainWindow::~MainWindow()
{
delete btn;
}
void MainWindow::slots_func(void)
{
qDebug("我被触发了");
emit signal_func(100); //发射信号
}
void MainWindow::slots_func(int signum)
{
qDebug("%d",signum);
}
二、界面布局
1、在设计界面一般不建议直接设计窗口或控件的大小(像素点数),除非容器固定大小,否则界面改变大小时布局会乱
2、如果不固定窗口的大小,一般使用自动布局,前提是在窗口添加一个布局器,然后设置窗口为自动布局(在窗口的空白位置右击->布局->水平、垂直、栅格)
3、在窗口内部想让某些控件自动排列,可以选择使用布局器:
水平布局: QHBoxLayout
垂直布局:QVBoxLayout
栅格布局: QGridlayout
布局器中的控件会根据布局器的大小自动排列控件,自动设置控件的大小
4、设置窗口自动布局,控件会随着窗口的大小而变化,可以使用"弹簧”来约束控件的位置
三、项目资源
1、项目的资源一般指的是项目中使用到的图标、图片、音频、视频等
2、使用资源文件有两种方式:
1、使用QPainter或QImage类读取资源文件,然后绘制在窗口或控件上 (画板)
2、创建Qt资源文件,统一管理图片等资源文件
3、在窗口或控件上绘制图片:
1、由于QPainter只能工作在paintEvent函数中,因此必须覆盖此函数
2、QImage控制图片文件的路径即可,创建QImage对象
3、QPainter创建时需要提供在窗口的地址
4、QPainter对象调用drawImage成员函数绘制图片
5、paintEvent会被update自动调用
注意:不建议使用此方法显示图片,更多的是进行绘制图形
4、Qt资源文件
1、选中项目右击->添加新文件->Qt->Qt资源文件->填写资源文件名
2、双击打开创建好的资源文件->添加->添加前缀->添加文件->选择要添加的文件
3、可以在设计师中使用资源文件,选择控件右击->改变样式表->添加资源->border-image
4、也可以在代码中调用setStyleSheet函数,为控件设计样式
5、设置控件样式表的技巧
1、在为窗口设置样式表后,窗口中的控件也会继承这个样式,解决方法是为控件也设置样式表,覆盖窗口的样式表
QWidget
{
background-color:rgb(255,255,255);
}
QPushButton
{
background-color:rgb(255,245,66);
# 设置按钮的边框
border: 1px solid rgb(124,124,124);
# 设置按钮的圆角弧度
border-radius:5px;
}
2、设置控件的悬停样式
QPushButton:hover
{
background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(181, 225, 250, 255), stop:0.5 rgba(222, 242, 251, 255));
border-radius:5px;
border: 1px solid #3C80B1;
}
3、设置控件按下时的效果
QPushButton:pressed
{
background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(134, 198, 233, 255), stop:0.5 rgba(206, 234, 248, 255));
border-radius:5px;
border: 1px solid #5F92B2;
}