试图将信号从另一个类连接到主类的插槽
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);
}
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)));
}
相关文章:
- 升压信号2将插槽传递到成员功能以断开连接
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- QObject::连接无法将信号连接到*this*对象的插槽
- Qt5:连接:如果插槽的参数少于信号,如何使用"连接"
- 使用std::bind将Qt信号连接到插槽
- 使用信号和插槽连接多个 UI 对象
- 如果代码中没有连接任何插槽,是否有理由发出Qt信号?
- 连接来自 C++98 接口的 Qt 插槽和信号,无需 Qt、STL 或 Boost
- 连接信号(Qstring)白色插槽(字符串)的2个不同类别
- 文档在哪里说明如果参数不是从末端删除参数,则无法从QT信号插槽连接中删除参数?
- 连接 -> 窗口上没有这样的插槽
- 如何将信号连接到类的所有实例的插槽
- 通过排队的QT信号插槽连接发送QSHAREDPOINTERS的QVECTOR
- Qt转发插槽/连接插槽到插槽?
- 信号和插槽的连接(有关QListView)-QT
- 我可以交换QObject儿童保持信号和连接的插槽吗?
- Qt按钮无法连接插槽
- 如何使用C 插槽连接QML信号
- qnetworkAccessManager一个实例并连接插槽
- 在Qt中连接插槽