[英]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.