2015-02-23 56 views
0

我目前正在使用QT和MSVC 13编译器的GUI。 虽然建立一个网格我在头文件中具有与QWidget的QT-MSVC错误C2248

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

QObject无法复制。 – 2015-02-23 19:05:43

+0

所以,我在那里做什么,我认为它可能是square = SimSqaure(this),但我与SimLayout是一个QGridLayout并且没有遇到任何问题 – welsh4evr 2015-02-23 19:16:09

+0

也许在代码中我们可以'你看。我不确定'&square'的情况是否正确,但它已经是一个指针了。你真的想要64矢量和布局中的同一个对象吗? – 2015-02-23 19:54:03

回答

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的不能被复制,而不是使用它初始化=新,你在头文件中创建对象,然后在CPP使用调用构造函数的构造对象名(参数)。

只要告诉别人有这个问题。

+0

你没有解决任何问题。您在堆栈上创建的“SimSquare”在2行之后会超出范围,并且向量中有一个悬挂指针。功能结束时,SimBoard也超出了范围。 – 2015-02-25 06:48:12

相关问题