Имеется цель. С Бд считываем 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();
}