如果您能帮助我解决这个问题,我将不胜感激:
我有一个名为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
(元对象编译器),它会自动创建一些额外的方法实现(例如,用于信号和元对象处理)。