2015-03-04 4 views
-2

Мне нужно работать с 512 отдельными элементами прямоугольника в Qt, которые я реализую в QGraphicsScene. Я действительно не хочу объявлять все 512 элементов вручную, если только мне это не нужно. На данный момент у меня есть что-то вроде:Qt объявляет имена членов с помощью цикла

QGraphicsRectItem *rec1; 
QGraphicsRectItem *rec2; 
QGraphicsRectItem *rec3; 
QGraphicsRectItem *rec4; 
QGraphicsRectItem *rec5; 
QGraphicsRectItem *rec6; 
QGraphicsRectItem *rec7; 
QGraphicsRectItem *rec8; 
QGraphicsRectItem *rec9; 
QGraphicsRectItem *rec10; 
QGraphicsRectItem *rec11; 
QGraphicsRectItem *rec12; 

и т. Д. Это нужно будет поднять до rec512.

Я попытался реализовать цикл, чтобы сделать это для меня:

for(int i = 1;i=512;i++){ 
     QGraphicsRectItem *rec[i]; 
    } 

Однако я получаю сообщение об ошибке сказав «предполагаемое имя члена или; после спецификаций декларации

Я думаю, что невозможно реализовать цикл здесь, есть ли другой способ легко объявить все 512 элементов?

Спасибо :)

+2

Вы уже начали использовать расширенные рамки, такие как Qt, и вы даже не узнали о массивах? –

+0

Не могу поверить, что я об этом не думал. Я был настолько увлечен изучением материала QGraphics, используя массив для инициализации, полностью соскользнул с ума. спасибо mate –

ответ

0

Лучший подход:

// in some .cpp file 
#include <QVector> 
#include <QSharedPointer> 
#include <QDebug> 

// Suppose we have some Test class with constructor, destructor and some methods 
class Test 
{ 
public: 
    Test() 
    { 
     qDebug() << "Creation"; 
    } 

    ~Test() 
    { 
     qDebug() << "Destruction"; 
    } 

    void doStuff() 
    { 
     qDebug() << "Do stuff"; 
    } 
}; 

void example() 
{ 
    // create container with 4 empty shared poiters to Test objects 
    QVector< QSharedPointer<Test> > items(4); 

    // create shared poiters to Test objects 
    for (int i = 0; i < items.size(); ++i) 
    { 
     items[i] = QSharedPointer<Test>(new Test()); 
    } 

    // do some stuff with objects 
    for (int i = 0; i < items.size(); ++i) 
    { 
     items.at(i)->doStuff(); 
    } 

    // all Test objects will be automatically removed here (thanks to QSharedPointer) 
} 

В Вашем проекте Вы должны заменить тест с QGraphicsRectItem (или какой-либо другой класс) и вызвать соответствующие функции. Удачи!

0

Благодаря Benjamin Линдли для указывая на очевидное использование массива, который полностью запамятовал.

QGraphicsRectItem *rec[512]; 
+3

Я предлагаю вам заглянуть в [QVector] (http://doc.qt.io/qt-5/qvector.html) или [QList] (http://doc.qt.io/qt-5 /qlist.html), который может быть проще обработать в среде Qt. Когда в Риме.... – Bowdzone

 Смежные вопросы

  • Нет связанных вопросов^_^