首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pigpio库的Qt5中的C++回调函数

使用pigpio库的Qt5中的C++回调函数
EN

Stack Overflow用户
提问于 2018-08-14 23:42:50
回答 1查看 634关注 0票数 0

我在使用C++11将GPIO库与Qt5整合在一起时遇到了一些问题。

我想使用这个库:带有Qt的http://abyz.me.uk/rpi/pigpio/来轮询按钮按下。

到目前为止,我已经成功地将引脚设置为高或低,但现在我想使用库来轮询GPIO状态的变化。我的理解是有限的,但我认为这个库使用了回调函数。我得到的错误是

代码语言:javascript
复制
error: no matching function for call to 'gpioSetAlertFunc'
    Note: candidate function not viable: no known conversion fron 'void 
(MainWindow::*)()' to 'gpioAlertFunc_t' (aka 'void(*)(int, int, unsigned 
int)') for 2nd argument

我是不是漏掉了什么明显的东西?有什么特别的东西需要我去读一读吗?我的代码附在下面

非常感谢

piGPIO.h

代码语言:javascript
复制
typedef void (*gpioAlertFunc_t)    (int      gpio,
                                    int      level,
                                    uint32_t tick);

int gpioSetAlertFunc(unsigned user_gpio, gpioAlertFunc_t f);

Main.cpp

代码语言:javascript
复制
#include "mainwindow.h"

#include <pigpio.h>

int main(int argc, char *argv[])
{

    gpioInitialise();
    gpioSetAlertFunc(17, &MainWindow::gpioTest);

    QApplication a(argc, argv);
    MainWindow w;
    w.setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
    w.show();

    return a.exec();
}

MainWindow.h

代码语言:javascript
复制
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    Ui::MainWindow *ui;

public slots:

    void gpioTest(int gpio, int level, uint32_t tick);

signals:
    .
    .
    .

private slots:
    .
    .
    .

private:
    .
    .
    .    

};

MainWindow.cpp

代码语言:javascript
复制
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    .
    .
    .
}

void MainWindow::gpioTest(int gpio, int level, uint32_t tick){
    //gpioWrite() tested successfully 
    gpioWrite(22,1);
    return;
}
EN

回答 1

Stack Overflow用户

发布于 2018-08-15 00:25:42

问题是您正试图绑定到一个非静态成员函数,但是需要在MainWindow对象上调用gpioTest,因此类型不匹配。详情请参见https://isocpp.org/wiki/faq/pointers-to-members#memfnptr-vs-fnptr。该页面将为您提供一些想法,但确切的解决方案(例如静态函数vs包装器函数vs std::invoke等)将特定于您的应用程序的需求

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

https://stackoverflow.com/questions/51845195

复制
相关文章

相似问题

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