Qt C++ : 使用信号/插槽链接QPushButton子类的多个实例
Qt C++ : Linking multiple instances of a QPushButton subclass using Signals/Slots
如果您能帮助我解决这个问题,我将不胜感激:
我有一个名为Square的QPushButton子类,我想做的是通过单击Square的另一个实例来更改一个实例的图标。我有一个指向正方形的指针向量向量,称为sqMatrix:
std::vector< std::vector<Square*> > sqMatrix;
我想从主要方面做到这一点.cpp :
QObject::connect(sqMatrix.at(0).at(0),SIGNAL(clicked())
,sqMatrix.at(5).at(5),SLOT(discoverThis()));
我尝试了很多事情,做了很多研究,但我不知道如何正确地做到这一点。
在这里我遇到了错误:
QObject::connect: no so slot QPushButton::d iscoverThis()
以下是相应的 .h 和 .cpp 文件:
平方 :
#ifndef SQUARE_H
#define SQUARE_H
#include <QPushButton>
class Square : public QPushButton
{
public:
Square(const QString &text, QWidget *parent = 0);
void mousePressEvent(QMouseEvent *e);
public slots:
void discoverThis();
signals:
void clicked();
};
#endif // SQUARE_H
方形.cpp :
#include <QApplication>
#include <string>
#include "square.h"
#include <QMouseEvent>
Square::Square(const QString &text, QWidget *parent) : QPushButton(text,parent) {
setFixedSize(16,16);
setIcon(QIcon(":/images/images/square.png"));
}
void Square::mousePressEvent(QMouseEvent *e) {
if(e->button() == Qt::LeftButton) {
setIcon(QIcon(":/images/images/1.png"));
}
if(e->button() == Qt::RightButton) {
setIcon(QIcon(":/images/images/flag.png"));
}
}
void Square::discoverThis() {
setIcon(QIcon(":/images/images/8.png"));
}
void Square::clicked() {
}
我是一个乞丐,所以请宽容。我敢肯定我的代码中存在严重的错误。
任何帮助将不胜感激。
有好的一天。
问题是你错过了类中的Q_OBJECT
宏。请参阅"此处"箭头。
#ifndef SQUARE_H
#define SQUARE_H
#include <QPushButton>
class Square : public QPushButton
{
Q_OBJECT <---- HERE!
public:
Square(const QString &text, QWidget *parent = 0);
void mousePressEvent(QMouseEvent *e);
public slots:
void discoverThis();
// +++ The signal "clicked()" is already declared in QPushButton +++
//signals:
// void clicked();
};
#endif // SQUARE_H
QObject
的每个子类都需要Q_OBJECT
宏。这通常也会触发moc
(元对象编译器),它会自动创建一些额外的方法实现(例如,用于信号和元对象处理)。
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 避免在C++中重复子类定义
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 如何初始化矢量的模板化子类
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 使用子类覆盖基类中定义的函数
- 子类地址等于虚拟基类地址?
- 将子类方法声明为基类的友元
- C++子类共享变量?
- 如何检查模板专用化是否是基本模板的子类?
- 仅让特定类'Fabric'构造类'Foo'及其所有子类的实例
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 如何在C++子类中访问父类的私有变量
- Qt C++ : 使用信号/插槽链接QPushButton子类的多个实例