QT-MSVC错误C2248

时间:2015-02-23 19:01:08

标签: c++ qt visual-c++ qwidget

我目前正在使用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;
}

感谢您提供任何帮助。

1 个答案:

答案 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)调用构造函数。

只是因为其他人遇到这个问题。