如果您能帮助我解决这个问题,我将不胜感激:
我有一个名为Square的QPushButton子类,我想做的是通过单击Square的另一个实例来更改一个实例的图标。我有一个称为sqMatrix的正方形的指针 vector :
std::vector< std::vector<Square*> > sqMatrix;
我想从main.cpp做到这一点:
QObject::connect(sqMatrix.at(0).at(0),SIGNAL(clicked())
,sqMatrix.at(5).at(5),SLOT(discoverThis()));
我已经尝试了很多事情并做了很多研究,但是我不知道该怎么做。
这是我的错误:
这是相应的.h和.cpp文件:
square.h:
#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
square.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
宏。参见“HERE”箭头。
#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++ - Qt C++:使用Signals/Slots链接QPushButton子类的多个实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22842176/