首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将此函数连接到我的connectButton?

如何将此函数连接到我的connectButton?
EN

Stack Overflow用户
提问于 2017-05-11 09:03:39
回答 1查看 48关注 0票数 0

我正在尝试将addDevice()函数从我的设备类连接到我的GUI上的connectButton。但是,无论我如何尝试编写连接函数,它都无法工作。目前,它给出了错误:在“,”标记之前预期的主表达式。

我尝试了以下语法:

代码语言:javascript
复制
connect(ui->connectButton,SIGNAL(clicked(bool)),d,SLOT(startDeviceDiscovery()));
connect(ui->connectButton,SIGNAL(clicked(bool)),d,&Device::startDeviceDiscovery());
connect(ui->connectButton,SIGNAL(clicked(bool)),this,SLOT(startDeviceDiscovery()));
connect(ui->connectButton,SIGNAL(clicked(bool)),this,Device::startDeviceDiscovery());

MainWindow.cpp

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QObject>
#include <QBluetoothDeviceDiscoveryAgent>
#include <QtBluetooth>
#include <QDebug>
#include <QtWidgets>
#include "device.h"
#include "deviceinfo.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

Device d;

connect(ui->connectButton,SIGNAL(clicked(bool)),Device,SLOT(startDeviceDiscovery()));

//
.
.
.

}

Device.h

代码语言:javascript
复制
#ifndef DEVICE_H
#define DEVICE_H

#include <QObject>
#include <qbluetoothglobal.h>
#include <qbluetoothlocaldevice.h>
#include <QBluetoothDeviceDiscoveryAgent>
#include <QLowEnergyController>
#include <QBluetoothDeviceInfo>
#include <QBluetoothServiceInfo>
#include "deviceinfo.h"
#include <QList>
#include <QVariant>


class Device : public QObject
{
    Q_OBJECT
public:
    explicit Device(QObject *parent = 0);

QVariant name();
~Device();

signals:
    void address(QVariant);

public slots:
void startDeviceDiscovery();
void connectDeivce(const QString &address);

};

#endif // DEVICE_H
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-11 09:12:55

对于一个连接,您需要一个指针,并且您在构造函数上创建了您的设备,这意味着在使用连接之后,构造函数就会完成,这将破坏您的设备,断开函数。

正确的语法:

代码语言:javascript
复制
 Device *myDevice = new Device();

connect(
    ui->connectButton, // the pointer of the signal emitter
    &QPushButton::clicked, // the signal you are interested
    myDevice,              // the pointer to receiving end
    &Device::startDeviceDiscovery); // what you wanna trigger

您在测试中混合了各种可能性,但在所有测试中,您都将槽作为方法来处理,调用了()运算符。您不能调用调用操作符,在连接上,您将方法的指针传递到一个函数,该函数将在时机合适时为您调用该指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43911016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档