2017-05-11 1 views
0

내 Device 클래스의 addDevice() 함수를 GUI의 my connectButton에 연결하려고합니다. 그러나 연결 함수를 시도하고 코딩하는 방법에 관계없이 작동하지 않습니다. 현재 그것은 ':'토큰 앞에 기본 표현식이 있어야합니다.이 함수를 connectButton에 어떻게 연결합니까?

나는 추적의 구문 시도 :

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

#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

#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 
+0

왜 'bool' 매개 변수로'SIGNAL (클릭 (부울))'에 연결하고 있습니까? – riodoro1

답변

0

, • 포인터를 필요로 연결을 위해, 그리고 당신이 만든 당신의 장치가 생성자에 연결되면 연결이 사용 된 직후 생성자가 완료되고 이것이 des가됩니다. 장치를 트로이 (troy)하고 기능을 분리하십시오.

올바른 구문 :

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 

당신은 당신의 검사 결과 모든 가능성을 혼합,하지만 그들 모두에 당신은() 연산자를 호출하는 방법으로 슬롯을 처리 하였다. 호출 연산자를 호출 할 수 없습니다. 연결시 메소드의 포인터를 시간이 맞으면 호출 할 함수에 전달합니다.

관련 문제