将平铺的基础地图添加到GraphicsScene

阿里

我尝试使用Qt GUI创建平铺的基础地图:我有两个类:一类用于设置从QGraphicPixmapItem继承的平铺图像,一类用于从文本文件加载我的地​​图,该文本文件是由数字1、0组成的2D数组和2,并将其添加到场景中:但是我的程序意外退出,而且我不知道中断在哪里:

我的瓷砖课:

class mapTile: public QGraphicsPixmapItem
{
public:
    enum Tile {DOOR, GRASS, FIRE};

    mapTile(): QGraphicsPixmapItem(),currentTile(GRASS){
        syncBitmap();
    }

    Tile getTile() const {return currentTile;}

    void setTile(Tile newTile){
        if(currentTile!= newTile){
            currentTile=newTile;
            syncBitmap();
        }
    }

private:
    void syncBitmap() {//Set my image to my tile
        switch(currentTile) {
        case DOOR:
            image->setPixmap(QPixmap(":/mpa/castledoors.png"));
        case GRASS:
            image->setPixmap(QPixmap(":/map/grass3_blur.jpg"));
        case FIRE:
            image->setPixmap(QPixmap(":/map/feu1/png"));
        }
    }

    Tile currentTile;
    QGraphicsPixmapItem *image;

};

我的班级地图:

Map.h:

class Map
{

public:
    static const int TILE_SIZE=20; //value of the tile in pixels!!!->20X20=a tile
    void paintMap(QGraphicsScene *scene);
    Map();

 private:

    static const int WIDTH= 13;// width of the grid cell
    static const int HEIGHT= 9;//height  of the grid cell

    //my grid cell map !!!!
    int array[WIDTH][HEIGHT];
    mapTile *tile; //my tile

};

和Map.cpp

/*Create a default Map*/
Map::Map()
{
    QFile myfile("path to my file");
    if (!myfile.open(QIODevice::ReadOnly | QIODevice::Text))
    {
         QMessageBox::information(0, "error", myfile.errorString());
    }

    QTextStream in(&myfile);
    QString line ;
    QStringList fields;
    int i=0;
    int j=0;

    while (!in.atEnd()) {
        //Fill my array with my list--> convert Qtring into Int
        for (i=0; i<HEIGHT; i++ ) {

           line = in.readLine();
           fields = line.split(" ");

           for(j=0;j<WIDTH;j++)
           {
               //cout<<fields[j].toInt();
                array[i][j] = fields[j].toInt();
           }
        }
    }
}



//Paint my map with my tile
void Map::paintMap(QGraphicsScene *scene){

    int i=0, j=0;
    tile= new mapTile();

    for (i=0; i<HEIGHT; i++){
        for(j=0; j<WIDTH; j++){

            switch(array[i][j]){

            case 0:

                tile->setTile(mapTile::GRASS);
                tile->setPos(i,j);
                scene->addItem(tile);
                j+=TILE_SIZE;

            case 1:

                tile->setTile(mapTile::FIRE);
                tile->setPos(i,j);
                scene->addItem(tile);
                j+=TILE_SIZE;
            case 2:

                tile->setTile(mapTile::DOOR);
                tile->setPos(i,j);
                scene->addItem(tile);
                j+=TILE_SIZE;
            }

            i+=TILE_SIZE;//
        }
    }

}

最后是我的主窗口(我直接给了file.cpp):

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    myMap= new Map;
    scene= new QGraphicsScene(this);

    myMap->paintMap(scene);
    ui->graphicsView->setScene(scene);

}

MainWindow::~MainWindow()
{
    delete ui;
}

抱歉,很长的帖子,但我被卡住了!关于我错过的任何想法吗?

索比约恩·林德耶

好吧,您的代码中至少有五个问题:

  • myTile将它们添加到场景时,您不能共享同一实例。每次向场景中添加图块时,都需要创建一个新图块。目前,您仅在开始时创建一个实例Map::paintMap

  • 您的myTile类继承自QGraphicsPixmapItem,但是它也有一个QGraphicsPixmapItem *image;未初始化成员(因此它是漫游指针),但是随后使用它image->setPixmap(QPixmap(":/mpa/castledoors.png"));会崩溃。相反,您只想调用setPixmap(QPixmap(":/mpa/castledoors.png"))(调用您的超类的函数)。

  • 在上面的项目中,您可能已经注意到将“ map”拼写错误为“ mpa”,尽管这并不是崩溃的原因。

  • mapTile::syncPixmap和中Map::paintMap,您都忘记了中的break;语句switch没有这些,所有瓷砖都将看起来像防火瓷砖。

  • 您将瓦片大小添加到ij迭代器中,就好像它们是像素坐标一样,但是同时您将它们用作数组索引。你必须要么使用的像素坐标或多次单独的变量i,并j通过TILE_SIZE调用时setPos来代替。

祝你好运!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++-使用lambda将地图添加到地图

来自分类Dev

将文件添加到全局忽略列表基础SVN

来自分类Dev

如何将等高线添加到平铺图

来自分类Dev

将多边形添加到地图R传单

来自分类Dev

谷歌地图; 将地点卡添加到标记

来自分类Dev

如何将业务添加到Google地图

来自分类Dev

通过地图将3列添加到DataFrame

来自分类Dev

使用循环将地图元素添加到列表

来自分类Dev

clojure:将索引添加到地图矢量

来自分类Dev

将预设添加到ACF位置字段(Google地图)

来自分类Dev

使用JavaScript将数组值添加到地图中?

来自分类Dev

将波多黎各添加到JQV地图(国家)

来自分类Dev

Gson to json将地图动态添加到对象

来自分类Dev

Android:将数字添加到地图标记

来自分类Dev

将地图标记添加到“打开图层” 6

来自分类Dev

将地图中的数据添加到组件列表中

来自分类Dev

导航地图时将标记添加到Google Map

来自分类Dev

将中心地图添加到图块

来自分类Dev

将地图添加到片段会产生异常

来自分类Dev

将预设添加到ACF位置字段(Google地图)

来自分类Dev

尝试将KML图层添加到Google地图

来自分类Dev

使用json将infoWindow添加到地图标记

来自分类Dev

如何将首页添加到Django网站地图?

来自分类Dev

如何将构建作业添加到地图中?

来自分类Dev

highcharts地图将图像添加到工具提示

来自分类Dev

mule:如何将地图添加到列表?

来自分类Dev

将信息气泡添加到此处的地图

来自分类Dev

将主要列表添加到站点地图

来自分类Dev

如何将谷歌地图添加到照明元素?