Qt中槽函数的几种方法

第一种方法:(不推荐)

首先我们添加一个按钮,objectName要记住。接着进行下述操作。

声明槽函数并进行定义。

第一种已经完成,`ui->pushButton`: 信号发出者,表示界面上的按钮对象。
`SIGNAL(clicked(bool))`: 发出的信号,表示按钮被点击。
`this`: 信号接收者,表示当前对象。
`SLOT(pushButton1())`: 接收信号后调用的槽函数,表示调用当前对象的 `pushButton1()` 成员函数。

运行之后点击效果如下:

 第二种方法:(常用)

将connect的代码替换为下面代码:
connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::pushButton1);

运行效果一样。

第三种方法:


替换为如下代码,然后不需要按前面的操作声明和定义槽函数,直接lambda定义。

connect(ui->pushButton,&QPushButton::clicked,[=]{
        QMessageBox::information(this,u8"title",u8"clicked");
    });

第四种方法:

 点击第二个按钮进行槽函数编辑。

拖地然后进行添加,点击clicked(),点击编辑,然后点击如下:

 

这边直接默认slot1进行操作。

完成后如下图:

然后去声明和定义该槽函数。

这样子也就可以实现了。

第五种方法:

把按钮的objectName,声明为void on_objectName_clicked();然后进行定义便能达到效果。 

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt中,函数是由事件循环调用的,因此如果您想要利用多核处理来运行函数,可以考虑以下几种方式: 1. 使用QtConcurrent库:QtConcurrent库可以方便地将函数并行化,包括函数。您可以使用QtConcurrent::run()函数来将函数放到一个新的线程中运行,例如: ```cpp void MyClass::mySlot() { QtConcurrent::run(this, &MyClass::mySlotHelper); } void MyClass::mySlotHelper() { // 函数的实际代码 } ``` 2. 使用线程池:如果您需要在多个函数中共享线程池,可以使用QtQThreadPool类来管理线程池。您可以将函数包装成QRunnable对象,并将其提交给线程池,例如: ```cpp void MyClass::mySlot() { MyRunnable *runnable = new MyRunnable(this); QThreadPool::globalInstance()->start(runnable); } class MyRunnable : public QRunnable { public: MyRunnable(MyClass *obj) : m_obj(obj) {} void run() override { m_obj->mySlotHelper(); } private: MyClass *m_obj; }; ``` 3. 使用Qt的信号机制:信号机制本身就支持多线程,您可以将函数放到一个QObject的子类中,将该对象移动到一个新线程中,并将函数连接到其他对象的信号上,例如: ```cpp class MyObject : public QObject { Q_OBJECT public: MyObject(QObject *parent = nullptr) : QObject(parent) {} public slots: void mySlot() { /* 函数的实际代码 */ } }; MyObject *obj = new MyObject; QThread *thread = new QThread; obj->moveToThread(thread); connect(otherObj, &OtherObject::someSignal, obj, &MyObject::mySlot); thread->start(); ``` 需要注意的是,如果您使用了以上任何一种方法,都需要确保函数是线程安全的,因为它可能被多个线程同时调用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值