本篇主要介绍信号和槽,如何关联信号和槽以及用QPixmap在窗口中自适应显示图片
本文部分ppt、视频截图原链接:[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频]
1. 信号
一般不需要主动发送信号,只有自定义的一些控件才需要做信号的的发射处理
//声明格式
signals:
void valueChanged(int newValue);
void errorOccurred(const QString &message);
2. 槽函数
//声明格式
public slots:
void setValue(int value);
void logError(const QString &message);
3. 信号和槽连接方式
信号与槽(Signal & Slot)是Qt框架的核心机制,用于实现对象之间的通信。信号与槽函数之间通过connect()函数连接。
- 函数原型
connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
//参考写法
QObject::connect(QObject1,
SIGNAL(valueChanged(int)),//不需要带参数名称
QObject2,
SLOT(setNum(int)) //不需要带参数名称
);
- 五种连接类型
- 自动连接(AutoConnection) - 默认方式,根据线程自动判断
- 直接连接(DirectConnection) - 立即在发送者线程调用槽
- 队列连接(QueuedConnection) - 事件循环时在接收者线程调用
- 阻塞队列连接(BlockingQueuedConnection) - 同步的队列连接
- 唯一连接(UniqueConnection) - 防止重复连接
4. 实现关联时间与处理时间响应
创建一个项目,在.ui文件的界面中放入push button控件及label控件,如下所示
4.1 建立信号与槽关联
(1)在.h文件中声明槽函数
(2)在mainwindow.cpp文件中用connect()连接信号和槽,同时定义槽函数的功能
(3)运行后点击“按钮1”结果和点击“按钮2”结果分别如下
注 :label控件中相应文字随之改变,说明关联成功。(也可以增加断点,按F5进行调试测试)
4.2 QPixmap
QPixmap是Qt中用于处理图像数据的重要类,主要用于在屏幕上显示图像。
(1)在.h文件中声明QPixmap指针成员变量
(2)在项目文件夹中创建“image”文件夹,并放入两张图片,用于后面点击不同按钮的显示。在mainwindow.cpp文件中加载这两张图片
4.3 QLabel控件显示图片
(1)在槽函数中编写对应槽函数功能
- setPixmap()介绍
- 函数实现
- 运行结果
注:直接运行发现,点击按钮后图片不显示,需要将两张图片复制到build文件夹中,才能正确读取到文件(或者在载入文件时写绝对路径)
点击按钮1结果
点击按钮2结果
4.4 调整图片显示适应窗口
上面虽然实现了信号和槽函数关联,并成功显示图片,但是图片大小在窗口中显示效果不佳,可以通过其他一些设置函数让图片自适应窗口。
- 修改槽函数
- 结果显示
点击“按钮1”
点击“按钮2”