Qt文档阅读笔记-Multiple Inheritance Example 实例解析及Automatic Connections解析

本文解析了Qt中多重继承的实例,重点介绍uic的AutomaticConnections机制,通过CalculatorForm类展示如何在不显式使用connect的情况下实现信号与槽的自动连接。探讨了三种信号槽连接方式,并详细解释了AutomaticConnections的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

Multiple Inheritance Example 实例解析

Automatic Connections解析


 

Multiple Inheritance Example 实例解析

这个实例很简单,主要是为了引出uic的Automatic Connections

先把代码帖上来,再来简单的解析下:

源码如下:

calculatorform.h

#ifndef CALCULATORFORM_H
#define CALCULATORFORM_H

//! [0]
#include "ui_calculatorform.h"
//! [0]

//! [1]
class CalculatorForm : public QWidget, private Ui::CalculatorForm
{
    Q_OBJECT

public:
    explicit CalculatorForm(QWidget *parent = nullptr);

private slots:
    void on_inputSpinBox1_valueChanged(int value);
    void on_inputSpinBox2_valueChanged(int value);
};
//! [1]

#endif

calculatorform.cpp

#include "calculatorform.h"
#include <QWidget>


//! [0]
CalculatorForm::CalculatorForm(QWidget *parent)
    : QWidget(parent)
{
    setupUi(this);
}
//! [0]

//! [1]
void CalculatorForm::on_inputSpinBox1_valueChanged(int value)
{
    outputWidget->setText(QString::number(value + inputSpinBox2->value()));
}
//! [1]

//! [2]
void CalculatorForm::on_inputSpinBox2_valueChanged(int value)
{
    outputWidget->setText(QString::number(value + inputSpinBox1->value()));
}
//! [2]

main.cpp

#include "calculatorform.h"
#include <QApplication>

//! [0]
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    CalculatorForm calculator;
    calculator.show();
    return app.exec();
}
//! [0]

个人觉得这个应该是为了提醒多继承,才有一个继承private Ui::CalculatorForm。

这里最关键的是下面这两个槽函数:

在ui界面里面并在界面中关联信号与槽,也没有在代码中写connect,关联信号与槽,而是使用了Automatic Connections机制处理(uic与元对象共同作用)

  private slots:
      void on_inputSpinBox1_valueChanged(int value);
      void on_inputSpinBox2_valueChanged(int value);

这里使用的技术是uic编译成.h后,使用元对象自动连接,在下面的小结中将会说明。

来看看界面和各个变量名:

其中就是这个setupUi(this),这个函数是Ui::CalculatorForm里面的,通过参数this指针,使得CalculatorForm这个界面能够显示。

 

Automatic Connections解析

这个的主要原理是,把槽函数写成指定的格式,uic生成.h文件的时候,调用元对象的connectSlotsByName函数,从而达到自动连接的效果!

要求的槽函数格式如下:

  void on_<object name>_<signal name>(<signal parameters>);

这里uic生成的.h文件中,调用了元对象系的connectSlotsByName(this)。

从而实现了自动连接!

这种方式,感觉和Spring Boot中的JPA映射数据库表名和列名一样。

下面来总结下目前3种连接信号与槽的方式:

          1. 在代码中使用connect进行连接;

          2. 在ui文件中,配置信号与槽;

          3. 使用标准命名法利用uic与元对象连接信号与槽。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值