如何将信号和槽参数传递给QObject::connect

问题描述 投票:0回答:1

我收到错误:

调用不带对象参数的非静态成员函数

和:

无法获取“void”类型右值的地址

我查看了文档here以及许多教程和论坛,但我找不到我的代码与他们的代码有何不同。第一个错误与

&BoardScreen::boardScreenClosed()
相关,第二个错误与
&StartScreen::on_boardScreenClosed()
相关,均在
connect()
函数参数中。

boardscreen.h:

#ifndef BOARDSCREEN_H
#define BOARDSCREEN_H

#include <QMainWindow>

namespace Ui {
class BoardScreen;
}

class BoardScreen : public QMainWindow
{
    Q_OBJECT

public:
    explicit BoardScreen(QWidget *parent = nullptr);
    ~BoardScreen();

signals:
    void boardScreenClosed();

private:
    Ui::BoardScreen *ui;
    QWidget *parentForm;;
};

#endif // BOARDSCREEN_H

startscreen.h:

#ifndef STARTSCREEN_H
#define STARTSCREEN_H

#include <QMainWindow>
#include <QLabel>
#include <QObject>
#include "boardscreen.h"
#include "playscreen.h"

namespace Ui {
class StartScreen;
}

class StartScreen : public QMainWindow
{
    Q_OBJECT

public:
    explicit StartScreen(QWidget *parent = nullptr);
    ~StartScreen();

private slots:
    void on_btn_play_clicked(); // Open the board screen
    void on_boardScreenClosed();

private:
    Ui::StartScreen *ui;
    PlayScreen *playScreen;
};

#endif // STARTSCREEN_H

startscreen.cpp:

#include "startscreen.h"
#include "ui_startscreen.h"
#include "boardscreen.h"

StartScreen::StartScreen(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::StartScreen)
{
    ui->setupUi(this);
    setWindowTitle("chesster");
    setGeometry(200, 85, 1500, 900);

     // Load logo
    QString path = R"(C:/user/path/to/logo.png)";
    QPixmap img(path);
    ui->lbl_logo->setPixmap(img);

    this->show();
}

StartScreen::~StartScreen()
{
    delete ui;
}

void StartScreen::on_btn_play_clicked()
{
    BoardScreen *boardScreen = new BoardScreen(this);
    boardScreen->show();

    connect(boardScreen, &BoardScreen::boardScreenClosed(), this, &StartScreen::on_boardScreenClosed());

    this->hide();
}


void StartScreen::on_boardScreenClosed()
{
    this->show();
}
c++ qt signals-slots qt-signals
1个回答
0
投票

@JarMan 是正确的,我需要删除信号和槽名称后面的括号。 connect() 函数的正确语法是:

connect(boardScreen, &BoardScreen::boardScreenClosed, this, &StartScreen::on_boardScreenClosed);

这已经解决了问题。

This类似的问题没有回答我的问题,因为我没有连接到函数,而是连接到另一个对象插槽。

© www.soinside.com 2019 - 2024. All rights reserved.