Russian Qt Forum
Ноябрь 24, 2024, 22:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsScene  (Прочитано 2331 раз)
k2rush
Гость
« : Июнь 23, 2012, 02:03 »

Имеется цель. С Бд считываем int значения которые являются у нас координатами рисуемых квадратиков. БД подключил, для рисования использую цикл в котором по одной считываются строки и вызываетс яметод отрисовки. И тут я так понял надо задействовать QGraphicsScene, мол на каждом цикле туда что то дорисовываем, нашёл несколько примеров, и даже имею кое-какой код, но всё же не хватает знания самых основ видимо. Если всё делаю в одном файле то всё рисуется, а вот как пробую разнести, то сразу ступор.

Сам модуль отрисовки(class CircleItem) был взят с просторов этого сайта. Вначале пытался через PaintEvent что то сделать самостоятельно, но там совсем не вышло.

Если сцену пытаться запустить из main-а то она всплывает но пустая, а если из дочернего класса, то сцена вообдще не жизнеспособна, закрывается сразу сама.(почему? Непонимающий Непонимающий)
Код приложен
db.cpp
Код
C++ (Qt)
class CircleItem : public QGraphicsItem
{
public:
       CircleItem( int  radius, int iw, QGraphicsItem* parent = 0 )
       : QGraphicsItem( parent )
       , radius_( radius ),
         iq(iw){}
 
       void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0 )
       {
               painter->drawRect(radius_, iq, 5, 5);
       }
       QRectF boundingRect() const
       {
               return QRectF(radius_, iq, 5, 5);
       }
public:
       int radius_;
       int     iq;
 
};
 
db::db(const QString &tab1, QWidget * parent)
   : QGraphicsView(parent)
{
 
   officeTable = new QSqlRelationalTableModel(this);
   officeTable->setTable(tab1);
 
   officeTable->select();
 
 
   int officeCount = officeTable->rowCount();
 
   gv= new QGraphicsView;
   QGraphicsScene scene( -150, -150, 300, 300 );
 
   gv->setScene( &scene );
   gv->setRenderHint( QPainter::Antialiasing );
   gv->setPalette(QPalette(Qt::black));
 
   for (int i = 0; i < officeCount; i++) {
       QSqlRecord record = officeTable->record(i);
 
       int number = record.value("number").toInt();
       int leng = record.value("leng").toInt();
       int heng = record.value("heng").toInt();
       QString pict = record.value("pict").toString();
 
 
 
 
           int r =0;
           r = i;
               scene.addItem( new CircleItem( r, i ) );
 
   }
 
 
}
 

main.cpp
Код
C++ (Qt)
int main(int argc, char** argv)
{
   QApplication app(argc, argv);
 
 
 
   if (!createConnection()) {
       return -1;
   }
   db db1("tab1");
 
   db1.gv->show();
 
 
 
   return app.exec();
}
Записан
k2rush
Гость
« Ответ #1 : Июнь 23, 2012, 05:41 »

Уже понял, что нагородил огород с дополнительным классом, ведь есть scene::addRect Злой
Но всё равно проблема остаётся той же, не отображает нарисованное в порте.
Записан
k2rush
Гость
« Ответ #2 : Июнь 26, 2012, 16:21 »

МОжет кому-то будет интересно или полезно так же новичкам.
так ничего и не выводилось до те тех пор пока и сцена и вьюв не были созданы динамически(так кажется зовётся) то есть     QGraphicsView   *gv;
QGraphicsScene   *scene;
ПРи ином создании сцены, результата не было.
Не знаю баг это или фича
Записан
mutineer
Гость
« Ответ #3 : Июнь 26, 2012, 16:25 »

ПРи ином создании сцены, результата не было.
Не знаю баг это или фича

Это такая "фича" языка, на котором ты пишешь - созданные на стеке объекты удаляются при выходе из области видимости. В твоем случае сцена уничтожалась при выходе из конструктора класса db
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.09 секунд. Запросов: 20.