我需要一个可点击的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)));
^"
答案 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)));
}