Qt自定义信号槽的参数类型

在qt中使用信号槽时,qt给的数据类型很明显得不满足我们的要求,那么我们得去自定义一个数据类型,来满足我们的开发需求。

一:#include<QMetaType>

二:Q_DECLARE_METATYPE(ClassType)//  最好用在类或者结构体下面  这个声明主要是为了让qt所有模板都知道这个类型

三:qRegisterMetaType<ClassType>("ClassType")//进行注册    注意:这个函数一定要用在调用或者绑定信号槽前

使用抽象代码

#include<QMetatype>//声明
#include<QMap>
struc information{
    QString name;
    int age;
};

Q_DECLARE_METATYPE(information)  //让全世界的模板都知道这个数据类型的存在,如果注册QMap,QList...qt自身的的数据类型,则可以不用调用这个宏,直接注册就行。否则,必须调用该宏。

Class A(){
    Q_Object
    A(){
        qRegisterMetaType<information>("information")  //进行自定义的类进行注册
        qRegisterMetaType<QMap<QString,QString>>("QMap<QString,QString>")  //进行qt本身的类进行注册

public:
    sender()
    {
      connect(this,SIGNAL(sent(QMap<QString,QString>)),SLOT(receive(QMap<QString,QString>)));//绑定
    QMap<QString,QString> data;
    emit sent(data);//发送信号
    }

signals:
    void sent(QMap<QString,QString>);
public slots:
    void  receive(QMap<QString,QString>){}

}

 
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Qt 中,可以通过信号机制实现对象之间的通信。当一个对象发射一个信号时,其他对象可以通过连接这个信号来接收该信号。而且,信号机制还支持对参数的传递。 QAction 是 Qt 中用于表示动作的类,它通常用于菜单、工具栏等控件中。当 QAction 被触发时,它会发射 triggered() 信号,这时我们可以通过连接这个信号来执行一些操作。 我们可以在 QAction 对象的构造函数中设置其名称和图标等属性,并通过 connect() 函数连接它的 triggered() 信号到一个函数中,如下所示: ```cpp QAction *action = new QAction(QIcon("icon.png"), "Action Name", this); connect(action, &QAction::triggered, this, &MyClass::mySlotFunction); ``` 其中,`this` 是当前对象的指针,`MyClass` 是当前对象所属的类名,`mySlotFunction` 是接收 triggered() 信号函数名。 如果我们需要在函数中访问 QAction 对象本身或者传递一些参数,可以通过使用 `sender()` 函数和 `QVariant` 类型参数来实现。 例如,我们可以在 QAction 对象中设置一个自定义数据,然后在函数中获取该数据,如下所示: ```cpp QAction *action = new QAction("Action Name", this); action->setData(QVariant("Custom Data")); connect(action, &QAction::triggered, this, &MyClass::mySlotFunction); void MyClass::mySlotFunction() { QAction *action = qobject_cast<QAction*>(sender()); if (action) { QVariant data = action->data(); qDebug() << data.toString(); } } ``` 在上述代码中,我们通过 setData() 函数设置 QAction 的自定义数据为 "Custom Data",然后在函数 mySlotFunction() 中获取该数据并输出。注意,在函数中,我们通过 sender() 函数获取发送信号的对象,然后使用 qobject_cast() 函数将其转换为 QAction 对象,以便访问其数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值