我目前正在使用QT和MSVC 13编译器处理gui。 在设置网格时,我在QWidget上有错误
C:\Users\Gaz\Documents\CS22510\simsquare.h:15: error: C2248: 'QWidget::operator =' : cannot access private member declared in class 'QWidget'
头文件中的
#ifndef SIMSQUARE_H
#define SIMSQUARE_H
#include <QWidget>
class SimSquare : public QWidget
{
Q_OBJECT
public:
SimSquare(QWidget *parent = 0);
~SimSquare();
protected:
void PaintEvent(QPaintEvent *);
};
#endif // SIMSQUARE_H
这是cpp文件
#include "simsquare.h"
#include <QtGui>
SimSquare::SimSquare(QWidget *parent) : QWidget(parent)
{
QPalette palette(Square::palette());
palette.setColor(Qt::white);
setPalette(palette);
}
void SimSqaure::PaintEvent(QPaintEvent *){
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setBrush(Qt::white, Qt::SolidPattern);
painter.drawRect(10,15,80,90);
}
SimSquare::~SimSquare()
{
}
,这在
中引用#include "simulation.h"
#include "ui_simulation.h"
#include <QVector>
Simulation::Simulation(QWidget *parent) : QMainWindow(parent),
ui(new Ui::Simulation)
{
simLayout = new SimBoard(this, 8);
square = new SimSquare(this);
for(int x =0; x<8; x++){
for(int y =0; y<8; y++){
//square = new SimSquare();
squaresVec.append(&square);
simLayout->add_widget(&square);
}
}
this->setLayout(simLayout);
ui->setupUi(this);
}
Simulation::~Simulation()
{
delete ui;
}
感谢您提供任何帮助。
答案 0 :(得分:0)
好的,解决了这个问题,
#include "simulation.h"
#include "ui_simulation.h"
#include "simsquare.cpp"
#include "simboard.cpp"
#include <QVector>
#include <QDebug>
Simulation::Simulation(QWidget *parent) : QMainWindow(parent),
simui(new Ui::Simulation)
{
setupUI();
this->show();
}
void Simulation::setupUI(){
SimBoard simLayout(this,8);
for(int x =0; x<8; x++){
for(int y =0; y<8; y++){
SimSquare square(this);
squaresVec.append(&square);
simLayout.add_widget(&square);
}
}
this->setLayout(&simLayout);
qDebug() << "Setting layout";
simui->setupUi(this);
qDebug() << "setu[ UI";
}
基本上因为无法复制QWidget而不是使用= new初始化它,所以在头文件中创建对象,然后在cpp中使用Constructor objectname(parameters)调用构造函数。
只是因为其他人遇到这个问题。