无效使用非静态成员函数(在qt中)

use*_*884 4 c++ qt

我在mainwindow.h类文件(header?)中构建了我的函数原型:

    class MainWindow : public QMainWindow
{
    Q_OBJECT

    public:
    void receiveP();
Run Code Online (Sandbox Code Playgroud)

然后在我的main.cpp类文件中,我告诉函数该做什么:

void MainWindow::receiveP()
{
     dostuff
}
Run Code Online (Sandbox Code Playgroud)

然后在我的main.cpp类文件的main函数中,我尝试在一个线程中使用它:

 std::thread t1(MainWindow::receiveP);
 t1.detach();
Run Code Online (Sandbox Code Playgroud)

这给了我错误"无效使用非静态成员函数'void MainWindow :: receiveP()'.

Cam*_*ron 6

您正在尝试将成员函数指针传递给thread类的构造函数,该构造函数需要一个普通(非成员)函数指针.

传入一个静态方法函数指针(或指向一个自由函数的指针),并明确地给它一个对象的实例:

// Header:
static void receivePWrapper(MainWindow* window);

// Implementation:
void MainWindow::receivePWrapper(MainWindow* window)
{
    window->receiveP();
}

// Usage:
MainWindow* window = this;   // Or whatever the target window object is
std::thread t1(&MainWindow::receivePWrapper, window);
t1.detach();
Run Code Online (Sandbox Code Playgroud)

确保线程窗口对象被破坏之前终止.