saman_artorious
6th August 2012, 16:17
hi
I want to have 14 rectangles, 2 in each row inside every QGraphicsView. I tried to follow the 4000 chips example, it is nice. I tried to draw two rectangles with background images inside QGraphicsView. But, the problem I have is that I cannot arrange the position of the rectangles inside the view at all. If anyone worked with QGraphicsView could tell me how to add 14 medium sized rectangles inside the view...
this is how I added the two rectangles inside the view:
void MainWindow::populateScene()
{
scene = new QGraphicsScene;
QImage image("");//:/dolphin.png
// Populate scene
int xx = 0;
int nitems = 0;
// for (int i = -11000; i < 11000; i += 110) {
// ++xx;
// int yy = 0;
// for (int j = -7000; j < 7000; j += 70) {
// ++yy;
// qreal x = (i + 11000) / 22000.0;
// qreal y = (j + 7000) / 14000.0;
QColor color(image.pixel(int(image.width() * 1), int(image.height() * 1)));
// QGraphicsItem *item = new Chip(color, xx, yy);
// item->setPos(QPointF(i, j));
QGraphicsItem *item = new Chip(color, 0, 1);
QGraphicsItem *item2 = new Chip(color, 0, 2);
item->setPos(QPointF(-300,0));
item2->setPos(QPointF(100, 100));
scene->addItem(item);
scene->addItem(item2);
++nitems;
// }
// }
}
/************************************************** **************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the demonstration applications of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
** $QT_END_LICENSE$
**
************************************************** **************************/
#include "chip.h"
#include <QtGui>
Chip::Chip(const QColor &color, int x, int y)
{
this->x = x;
this->y = y;
this->color = color;
setZValue((x + y) % 2);
setFlags(ItemIsSelectable | ItemIsMovable);
setAcceptsHoverEvents(true);
}
QRectF Chip::boundingRect() const
{
return QRectF(0, 0, 110, 70);
}
QPainterPath Chip::shape() const
{
QPainterPath path;
path.addRect(14, 14, 82, 42);
return path;
}
void Chip::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(widget);
QColor fillColor = (option->state & QStyle::State_Selected) ? color.dark(150) : color;
if (option->state & QStyle::State_MouseOver)
fillColor = fillColor.light(125);
const qreal lod = option->levelOfDetailFromTransform(painter->worldTransform());
if (lod < 0.2) {
if (lod < 0.125) {
painter->fillRect(QRectF(0, 0, 110, 70), fillColor);
return;
}
QBrush b = painter->brush();
painter->setBrush(fillColor);
painter->drawRect(13, 13, 97, 57);
painter->setBrush(b);
return;
}
QPen oldPen = painter->pen();
QPen pen = oldPen;
int width = 0;
if (option->state & QStyle::State_Selected)
width += 2;
pen.setWidth(width);
QBrush b = painter->brush();
painter->setBrush(QBrush(fillColor.dark(option->state & QStyle::State_Sunken ? 120 : 100)));
// painter->drawRect(QRect(14, 14, 79, 39));
// painter->drawRect(QRect(0, 0, 200, 200));
//painter->setBrush(b);
//QRect rect(14, 14, 79, 39);
QRect rect(0, 0, 150, 150);
painter->drawRect(rect);
QImage image = QImage("dolphin.png", 0);
painter->drawImage(rect, image);
if (lod >= 1) {
// painter->setPen(QPen(Qt::gray, 1));
// painter->drawLine(15, 54, 94, 54);
// painter->drawLine(94, 53, 94, 15);
// painter->setPen(QPen(Qt::black, 0));
}
// Draw text
if (lod >= 2) {
// QFont font("Times", 10);
// font.setStyleStrategy(QFont::ForceOutline);
// painter->setFont(font);
// painter->save();
// painter->scale(0.1, 0.1);
// painter->drawText(170, 180, QString("Model: VSC-2000 (Very Small Chip) at %1x%2").arg(x).arg(y));
// painter->drawText(170, 200, QString("Serial number: DLWR-WEER-123L-ZZ33-SDSJ"));
// painter->drawText(170, 220, QString("Manufacturer: Chip Manufacturer"));
// painter->restore();
}
// Draw lines
QVarLengthArray<QLineF, 36> lines;
if (lod >= 0.5) {
// for (int i = 0; i <= 10; i += (lod > 0.5 ? 1 : 2)) {
// lines.append(QLineF(18 + 7 * i, 13, 18 + 7 * i, 5));
// lines.append(QLineF(18 + 7 * i, 54, 18 + 7 * i, 62));
// }
// for (int i = 0; i <= 6; i += (lod > 0.5 ? 1 : 2)) {
// lines.append(QLineF(5, 18 + i * 5, 13, 18 + i * 5));
// lines.append(QLineF(94, 18 + i * 5, 102, 18 + i * 5));
// }
}
if (lod >= 0.4) {
// const QLineF lineData[] = {
// QLineF(25, 35, 35, 35),
// QLineF(35, 30, 35, 40),
// QLineF(35, 30, 45, 35),
// QLineF(35, 40, 45, 35),
// QLineF(45, 30, 45, 40),
// QLineF(45, 35, 55, 35)
// };
// lines.append(lineData, 6);
}
// painter->drawLines(lines.data(), lines.size());
// Draw red ink
if (stuff.size() > 1) {
// QPen p = painter->pen();
// painter->setPen(QPen(Qt::red, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
// painter->setBrush(Qt::NoBrush);
// QPainterPath path;
// path.moveTo(stuff.first());
// for (int i = 1; i < stuff.size(); ++i)
// path.lineTo(stuff.at(i));
// painter->drawPath(path);
// painter->setPen(p);
}
}
void Chip::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsItem::mousePressEvent(event);
update();
}
void Chip::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
if (event->modifiers() & Qt::ShiftModifier) {
stuff << event->pos();
update();
return;
}
QGraphicsItem::mouseMoveEvent(event);
}
void Chip::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsItem::mouseReleaseEvent(event);
update();
}
I want to have 14 rectangles, 2 in each row inside every QGraphicsView. I tried to follow the 4000 chips example, it is nice. I tried to draw two rectangles with background images inside QGraphicsView. But, the problem I have is that I cannot arrange the position of the rectangles inside the view at all. If anyone worked with QGraphicsView could tell me how to add 14 medium sized rectangles inside the view...
this is how I added the two rectangles inside the view:
void MainWindow::populateScene()
{
scene = new QGraphicsScene;
QImage image("");//:/dolphin.png
// Populate scene
int xx = 0;
int nitems = 0;
// for (int i = -11000; i < 11000; i += 110) {
// ++xx;
// int yy = 0;
// for (int j = -7000; j < 7000; j += 70) {
// ++yy;
// qreal x = (i + 11000) / 22000.0;
// qreal y = (j + 7000) / 14000.0;
QColor color(image.pixel(int(image.width() * 1), int(image.height() * 1)));
// QGraphicsItem *item = new Chip(color, xx, yy);
// item->setPos(QPointF(i, j));
QGraphicsItem *item = new Chip(color, 0, 1);
QGraphicsItem *item2 = new Chip(color, 0, 2);
item->setPos(QPointF(-300,0));
item2->setPos(QPointF(100, 100));
scene->addItem(item);
scene->addItem(item2);
++nitems;
// }
// }
}
/************************************************** **************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the demonstration applications of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
** $QT_END_LICENSE$
**
************************************************** **************************/
#include "chip.h"
#include <QtGui>
Chip::Chip(const QColor &color, int x, int y)
{
this->x = x;
this->y = y;
this->color = color;
setZValue((x + y) % 2);
setFlags(ItemIsSelectable | ItemIsMovable);
setAcceptsHoverEvents(true);
}
QRectF Chip::boundingRect() const
{
return QRectF(0, 0, 110, 70);
}
QPainterPath Chip::shape() const
{
QPainterPath path;
path.addRect(14, 14, 82, 42);
return path;
}
void Chip::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(widget);
QColor fillColor = (option->state & QStyle::State_Selected) ? color.dark(150) : color;
if (option->state & QStyle::State_MouseOver)
fillColor = fillColor.light(125);
const qreal lod = option->levelOfDetailFromTransform(painter->worldTransform());
if (lod < 0.2) {
if (lod < 0.125) {
painter->fillRect(QRectF(0, 0, 110, 70), fillColor);
return;
}
QBrush b = painter->brush();
painter->setBrush(fillColor);
painter->drawRect(13, 13, 97, 57);
painter->setBrush(b);
return;
}
QPen oldPen = painter->pen();
QPen pen = oldPen;
int width = 0;
if (option->state & QStyle::State_Selected)
width += 2;
pen.setWidth(width);
QBrush b = painter->brush();
painter->setBrush(QBrush(fillColor.dark(option->state & QStyle::State_Sunken ? 120 : 100)));
// painter->drawRect(QRect(14, 14, 79, 39));
// painter->drawRect(QRect(0, 0, 200, 200));
//painter->setBrush(b);
//QRect rect(14, 14, 79, 39);
QRect rect(0, 0, 150, 150);
painter->drawRect(rect);
QImage image = QImage("dolphin.png", 0);
painter->drawImage(rect, image);
if (lod >= 1) {
// painter->setPen(QPen(Qt::gray, 1));
// painter->drawLine(15, 54, 94, 54);
// painter->drawLine(94, 53, 94, 15);
// painter->setPen(QPen(Qt::black, 0));
}
// Draw text
if (lod >= 2) {
// QFont font("Times", 10);
// font.setStyleStrategy(QFont::ForceOutline);
// painter->setFont(font);
// painter->save();
// painter->scale(0.1, 0.1);
// painter->drawText(170, 180, QString("Model: VSC-2000 (Very Small Chip) at %1x%2").arg(x).arg(y));
// painter->drawText(170, 200, QString("Serial number: DLWR-WEER-123L-ZZ33-SDSJ"));
// painter->drawText(170, 220, QString("Manufacturer: Chip Manufacturer"));
// painter->restore();
}
// Draw lines
QVarLengthArray<QLineF, 36> lines;
if (lod >= 0.5) {
// for (int i = 0; i <= 10; i += (lod > 0.5 ? 1 : 2)) {
// lines.append(QLineF(18 + 7 * i, 13, 18 + 7 * i, 5));
// lines.append(QLineF(18 + 7 * i, 54, 18 + 7 * i, 62));
// }
// for (int i = 0; i <= 6; i += (lod > 0.5 ? 1 : 2)) {
// lines.append(QLineF(5, 18 + i * 5, 13, 18 + i * 5));
// lines.append(QLineF(94, 18 + i * 5, 102, 18 + i * 5));
// }
}
if (lod >= 0.4) {
// const QLineF lineData[] = {
// QLineF(25, 35, 35, 35),
// QLineF(35, 30, 35, 40),
// QLineF(35, 30, 45, 35),
// QLineF(35, 40, 45, 35),
// QLineF(45, 30, 45, 40),
// QLineF(45, 35, 55, 35)
// };
// lines.append(lineData, 6);
}
// painter->drawLines(lines.data(), lines.size());
// Draw red ink
if (stuff.size() > 1) {
// QPen p = painter->pen();
// painter->setPen(QPen(Qt::red, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
// painter->setBrush(Qt::NoBrush);
// QPainterPath path;
// path.moveTo(stuff.first());
// for (int i = 1; i < stuff.size(); ++i)
// path.lineTo(stuff.at(i));
// painter->drawPath(path);
// painter->setPen(p);
}
}
void Chip::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsItem::mousePressEvent(event);
update();
}
void Chip::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
if (event->modifiers() & Qt::ShiftModifier) {
stuff << event->pos();
update();
return;
}
QGraphicsItem::mouseMoveEvent(event);
}
void Chip::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsItem::mouseReleaseEvent(event);
update();
}