C++ Qt5 中带有 pigpio 库的回调函数



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

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

到目前为止,我已经设法将引脚设置得高或低,但现在我想使用该库轮询 GPIO 状态的更改。我的理解是有限的,但我认为该库使用回调函数。我得到的错误是

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

我错过了一些明显的东西吗?有什么特别的我需要阅读吗?我的代码附在下面

非常感谢

皮皮奥·

typedef void (*gpioAlertFunc_t)    (int      gpio,
int      level,
uint32_t tick);
int gpioSetAlertFunc(unsigned user_gpio, gpioAlertFunc_t f);

主.cpp

#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();
}

主窗口.h

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:
.
.
.    
};

主窗口.cpp

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;
}

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

相关内容

  • 没有找到相关文章

最新更新