2017-05-11 4 views
0

デバイスクラスのaddDevice()関数を自分のGUIのconnectButtonに接続しようとしています。しかし、私がどのようにしてconnect関数を試しても、それは動作しません。現在、それは私にエラーを与えています: '、'トークンの前に一次式が必要です。この関数をconnectButtonにどのように接続すればよいですか?

私がフォロー構文を試してみました

:Connectの

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あなたのデバイスをトロイ、機能を切断する。

正しい構文:

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 

あなたのテストですべての可能性を混入し、それらのすべてで、あなたは()演算子を呼び出すと、メソッドとしてスロットを処理しました。コールオペレータを呼び出すことはできません。接続時には、メソッドのポインタを、時間が正しいときに呼び出す関数に渡しています。

関連する問題