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

时间:2015-05-28 02:00:57

标签: c++ qt

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

"点击"发出我希望我的主窗口中的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)));
                       ^"

1 个答案:

答案 0 :(得分:0)

您需要将插槽连接到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)));
}