试图将信号从另一个类连接到主类的插槽

Trying to connect a signal from another class to a slot in the main class

本文关键字:连接 插槽 另一个 信号      更新时间:2023-10-16

我需要一个可点击的QLabel,所以我创建了一个名为"clickablelabel"的类,这是一个具有mouseReleaseEvent的QLabel。一旦它被调用,它将发出"clicked(cid)"。"cid"是clickablelabel内部的一个公共变量,由clickablelabel设置。

当"clicked"发出时,我希望主窗口中的UI改变,所以我这样做了:

clickablelabel.h

signals:
    void clicked(int id);

clickablelabel.cpp

void clickableLabel::mouseReleaseEvent ( QMouseEvent * event )
{
    emit clicked(cid);
}

mainwindow.h

private slots:
    void test(int id);

mainwindow.cpp

void MainWindow::test(int id){
    qDebug() << id;
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
    connect(clickableLabel, SIGNAL(clicked(int)), this, SLOT(test(int)));
    ui->setupUi(this);
}

这是当我尝试运行程序时得到的错误:

"expected primary-expression before ',' token
 connect(clickableLabel, SIGNAL(clicked(int)), this, SLOT(test(int)));
                       ^"

您需要将插槽连接到clickableLabel实例中的信号,而不是连接到类本身。换句话说,构造一个clickableLabel的新实例,可能在构造函数中,然后将指向该对象的指针传递给connect函数。此外,MainWindow::test应该是一个公共频道,我认为;你把它声明为私有

可能的实现:在mainwindow.h

class MainWindow: public QMainWindow {
    /*Your stuff*/
    clickableLabel* label = nullptr;
}
在mainwindow.cpp:

MainWindow::MainWindow(QWidget* parent) {
    label = new clickableLabel;
    connect(label, SIGNAL(clicked(int)), this, SLOT(test(int)));
}