2015-02-23 70 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

相關問題