繁体   English   中英

尝试将另一类的信号连接到主类中的插槽

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

我需要一个可单击的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);
}

主窗口

private slots:
    void test(int id);

主窗口

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM