void Visual::makeWalls(map &mapp,int k) { QGraphicsScene::clear(); QBrush wall(QColor(255, 255, 255), QPixmap(":resource/images/wall.png")); QPen pen(Qt::NoPen); QBrush liftup (QColor(255, 255, 255), QPixmap(":resource/images/Liftup.png")); QBrush liftdown(QColor(255, 255, 255), QPixmap(":resource/images/Liftdown.png")); for (int i = 0; i < mapp.len; i++) { for (int j = 0; j < mapp.wid; j++) { if (mapp.floor[i][j][k] == map::WALL) { QGraphicsItem * item = addRect(QRectF(i*10, j*10, 10, 10), pen, wall); item->setData(0, map::WALL); } if (mapp.floor[i][j][k] == map::LIFT_UP) { QGraphicsItem * item = addRect(QRectF(i*10, j*10, 10, 10), pen, liftup); item->setData(0, map::LIFT_UP); } if (mapp.floor[i][j][k] == map::LIFT_DOWN) { QGraphicsItem * item = addRect(QRectF(i*10, j*10, 10, 10), pen, liftdown); item->setData(0, map::LIFT_DOWN); } } } }
void CellScene::mousePressEvent(QGraphicsSceneMouseEvent * mouseEvent) { QGraphicsItem * item = itemAt(mouseEvent->scenePos()); QGraphicsEllipseItem * item1; if (mouseEvent->button() == Qt::LeftButton) if (item) if (item->data(0) == "cellpoint" && item->data(1) == "") { // qDebug() << "marked"; item1 = (QGraphicsEllipseItem*) item; item1->setPen(QPen(color, 3)); item->setData(1, "marked"); item->setData(2,struct_num); updatePointsNumbers(); item->setData(4,0); // qDebug() <<item->data(2); } if (mouseEvent->button() == Qt::RightButton) if (item) if (item->data(1) == "marked") { item1 = (QGraphicsEllipseItem*) item; item1->setPen(QPen(Qt::blue, 2)); item->setData(1, ""); item->setData(2, ""); item->setData(3,""); item->setData(4,""); // qDebug() <<item->data(2); // qDebug() << "unmarked"; } }
void ObjectsScene::addObject(int id, const Object& obj) { const XY& p = obj.pos(); const QPointF position(p.x, p.y); BaseType radius = obj.radius(); QGraphicsItem* item = createItem(radius); item->setPos(position); item->setData(ObjectData::Id, id); item->setData(ObjectData::Radius, radius); m_objects.insert( std::make_pair(id, item) ); }
//Рисуем карту. Где 1 - там земля, где 0 - ничего. Так как карта - одномерный массив, то переводим координаты в одномерные. void MvScene::makeMap() { int map[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,1,1,1,1,0,0,0,0,1,1,0,0, 0,1,1,1,1,1,1,1,0,0,0,1,1,0,0, 0,1,1,0,0,0,1,1,0,0,0,1,1,0,0, 0,1,1,0,0,0,1,1,1,1,1,1,1,1,1, 0,1,1,0,0,0,1,1,1,1,1,1,1,1,1, 0,1,1,0,0,0,1,1,0,0,0,1,1,0,0, 0,1,1,0,0,0,1,1,0,0,0,1,1,0,0, 0,1,1,0,0,0,1,1,0,0,0,1,1,0,0, 0,1,1,0,0,0,1,1,0,0,0,1,1,0,0, 0,1,1,0,0,1,1,1,0,0,0,1,1,0,0, 0,1,1,1,1,1,1,1,1,0,0,1,1,0,0, 0,0,1,1,1,1,1,1,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,1,1,1,1,0,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; QBrush brush(QColor(255, 255, 255), QPixmap("mapGrass.jpg")); QPen pen(Qt::NoPen); for (int x = 0; x < 15; x++){ for(int y = 0; y < 15; y++){ if(map[x+15*y] == 1){ QGraphicsItem * item = addRect(QRectF(50*x,50*y,50,50), pen, brush); item->setData(0,"Map"); } } } }
void MapScene::addMark(qreal latitude, qreal longitude, QVariant data) { //NOTE: Need to be refactored for use with marks QPixmap pixmap(20,20); pixmap.fill(Qt::transparent); QPoint center(pixmap.width()/2, pixmap.height()/2); QPainter painter; painter.begin(&pixmap); painter.setBrush(Qt::blue); painter.drawEllipse(center, pixmap.width()/2, pixmap.height()/2); painter.setBrush(Qt::black); painter.drawEllipse(center, pixmap.width()/10, pixmap.height()/10); painter.end(); QGraphicsItem * mark = this->addPixmap(pixmap); QPointF mark_point = OSMCoordinatesConverter::GeoToTile(latitude, longitude, this->m_zoom); mark_point.setX(mark_point.x()*256.0); mark_point.setY(mark_point.y()*256.0); mark->setX(mark_point.x()); mark->setY(mark_point.y()); mark->setData(0,data); this->views()[0]->centerOn(mark_point); }
void ObjectsScene::updateRadius(int id, BaseType r) { auto obj = m_objects.find(id); assert(obj != m_objects.end()); QGraphicsItem* item = createItem(r); item->setData(ObjectData::Id, id); item->setData(ObjectData::Radius, r); const QPointF pos = obj->second->pos(); item->setPos(pos); // swap items removeItem(obj->second); delete obj->second; obj->second = item; }
void GraphicsScene::resetPositionHasChangedFlags() { LOG4CPP_INFO_S ((*mainCat)) << "GraphicsScene::resetPositionHasChangedFlags"; QList<QGraphicsItem*> itms = items (); QList<QGraphicsItem*>::const_iterator itr; for (itr = itms.begin (); itr != itms.end (); itr++) { QGraphicsItem *item = *itr; item->setData (DATA_KEY_POSITION_HAS_CHANGED, false); } }
//размещаем смайл на карте. для того, чтобы карта была сеткой, положение мыши округляем до ближайщего квадрата размером 50х50 void MvScene::placeSmile(float x, float y) { QGraphicsItem * smile = addPixmap(QPixmap("Smile.png")); div_t x1 = div(x,50); div_t y1 = div(y,50); smile->translate(x1.quot*50, y1.quot*50); if (itemCollidesWith(smile)->data(0)=="Map") smile->setData(0, "Smile"); else{ removeItem(smile); } }
void ViewGraphics::dropEvent(QDropEvent *event){ if (event->mimeData()->hasFormat("application/x-dnditemdata")) { QByteArray itemData = event->mimeData()->data("application/x-dnditemdata"); QDataStream dataStream(&itemData, QIODevice::ReadOnly); QPixmap pixmap; QPoint offset; dataStream >> pixmap >> offset; QPoint pointAtual = event->pos() - offset; QGraphicsItem *pix = scene->addPixmap(pixmap); pix->setPos(pointAtual.x(), pointAtual.y()); event->setDropAction(Qt::MoveAction); event->accept(); /** Abrir tela de cadastro do pc / switch**/ QString componentName = oController->getComponentName(); if(QString::compare(componentName, QString("laComputer")) == 0) { pix->setData(1, QVariant("laComputer")); ComputerController *c = new ComputerController(this, pix); c->setController(oController); c->show(); } else if (QString::compare(componentName, QString("laSwitch")) == 0) { if(oController->getSwitch() == NULL) { pix->setData(1, QVariant("laSwitch")); SwitchController *s = new SwitchController(this, pix); s->setController(oController); s->show(); } else { oController->print(QString("Já existe um switch!")); SwitchController *s = new SwitchController(this, pix); s->hideItem(); } } itensMove(); } else {
void GraphViewer::onValueEdited() { bool ok=false; int newvalue = _valueEditor.text().toInt(&ok); if (ok) { if (qgraphicsitem_cast<QGraphicsSimpleTextItem*>(_editedItem)) { QGraphicsSimpleTextItem* text = qgraphicsitem_cast<QGraphicsSimpleTextItem*>(_editedItem); text->setText(QString("%1").arg(newvalue)); QGraphicsItem* parent = text->parentItem(); if (parent) { parent->setData(KEY_EDGE_WEIGHT, newvalue); } _valueEditor.hide(); } } }
// ////////////////////////////////////Draw BG image///////////////////////////////////////////////// void LvlScene::DrawBG(int x, int y, int w, int h, int sctID, QPixmap &srcimg, QPixmap &srcimg2, obj_BG &bgsetup) { /* Old Algorith */ //QPixmap BackImg; //QPainter * BGPaint; //QPixmap img; int si_attach, attach; /* New Algorith */ QGraphicsItem * item; //QGraphicsRectItem * itemR=NULL; QColor FillColor; //Fill undrawed space with color long sctW,//Section Width sctH,//Section Height R1W, //Img Width (Row1) R1H, //Img Height (Row1) R1Hc=0, //Crop height from bottom R1Ho=0, //Offset from top R2W, //Img Width (Row2) R2H, //Img Height (Row2) R2Hc=0, //Crop height from bottom R2Ho=0, //Offset from top RectPlus=0, toY; //Placing position Y 0 - top sctW = (long)fabs(x-w); sctH = (long)fabs(y-h); WriteToLog(QtDebugMsg, "Draw BG -> Draw BG Image"); attach = bgsetup.attached; // ///////////////////SingleRow BG/////////////////////////// if((bgsetup.type==0)&&(!bgsetup.editing_tiled)) { WriteToLog(QtDebugMsg, "Draw BG -> Style: SingleRow BG"); R1W = srcimg.width(); R1H = srcimg.height(); if(attach==0) // Get Pixel color (0 - bottom, 1 - top) FillColor = QColor( srcimg.toImage().pixel(0,0) ); // from top else FillColor = QColor( srcimg.toImage().pixel(0,(R1H-1)) ); //from bottom if(attach==0) { // 0 - bottom toY = (sctH>R1H)? sctH-R1H : 0; R1Hc = ((R1H>sctH) ? R1H-sctH : 0); //Crop height from bottom R1Ho = R1Hc; //Offset from top RectPlus=0; } else { // 1 - top toY = 0; R1Hc = ((R1H>sctH) ? R1H-sctH : 0); //Crop height from bottom R1Ho = 0; //Offset from top RectPlus=R1H; } // /////////////////////Draw row////////////////// item = addRect(0, 0, sctW, R1H-R1Hc, Qt::NoPen, QBrush(srcimg.copy(0, R1Ho, R1W, R1H-R1Hc))); item->setData(0, QString("BackGround%1").arg(sctID) ); item->setPos(x, y+toY); item->setZValue(bgZ); if(R1H < sctH) { item = addRect(0, 0, sctW, sctH-R1H, Qt::NoPen, QBrush(FillColor)); item->setData(0, QString("BackGround%1").arg(sctID) ); item->setPos(x,y+RectPlus); item->setZValue(bgZ); } } else // ///////////////////DoubleRow BG//////////////////////// if((bgsetup.type==1)&&(!bgsetup.editing_tiled)) { WriteToLog(QtDebugMsg, "Draw BG -> Style: DoubleRow BG"); si_attach = bgsetup.second_attached; // Second image attach R1W = srcimg.width(); R1H = srcimg.height(); //Fill empty space if((!srcimg2.isNull()) && (si_attach==0)) FillColor = QColor( srcimg2.toImage().pixel(0,0) ); else FillColor = QColor( srcimg.toImage().pixel(0,0) ); toY = (sctH>R1H)? sctH-R1H : 0; R1Hc = ((R1H>sctH) ? R1H-sctH : 0); //Crop height from bottom R1Ho = R1Hc; //Offset from top RectPlus=0; WriteToLog(QtDebugMsg, QString("Draw BG -> Draw first row, params: ")); // /////////////////////Draw first row////////////////// item = addRect(0, 0, sctW, R1H-R1Hc, Qt::NoPen, QBrush(srcimg.copy(0, R1Ho, R1W, R1H-R1Hc))); item->setData(0, QString("BackGround%1").arg(sctID) ); item->setPos(x, y+toY); item->setZValue(bgZ); // /////////////////////Draw first row////////////////// WriteToLog(QtDebugMsg, "Draw BG -> Draw second row"); R2W = srcimg2.width(); R2H = srcimg2.height(); if(si_attach==0) // over first { toY = (sctH-R1H > R2H)? sctH-R2H-R1H : 0; R2Hc = ((R2H+R1H>sctH) ? R2H-(sctH-R1H) : 0); //Crop height from bottom R2Ho = R2Hc; //Offset from top RectPlus=R2H; } else if(si_attach==1) // bottom { toY = (sctH > R2H)? sctH-R2H : 0; R2Hc = ((R2H>sctH) ? R2H-sctH : 0); //Crop height from bottom R2Ho = R2Hc; //Offset from top RectPlus=0; } if((!srcimg2.isNull()) && ((sctH > R1H)||(si_attach==1))) { // /////////////////////Draw second row////////////////// item = addRect(0, 0, sctW, R2H-R2Hc, Qt::NoPen, QBrush( srcimg2.copy(0, R2Ho, R2W, R2H-R2Hc) )); item->setData(0, QString("BackGround%1").arg(sctID) ); item->setPos(x, y+toY); item->setZValue(bgZ+0.0000000001); // /////////////////////Draw second row////////////////// } else if(srcimg2.isNull()) WriteToLog(QtWarningMsg, "Draw BG -> second image is Null"); if( R1H+RectPlus < sctH ) { item = addRect(0, 0, sctW, sctH-R1H-RectPlus, Qt::NoPen, QBrush(FillColor)); item->setData(0, QString("BackGround%1").arg(sctID) ); item->setPos(x,y); item->setZValue(bgZ); } } else // ///////////////////////////////Tiled BG/////////////////////////////// { WriteToLog(QtDebugMsg, "Draw BG -> Style: Tiled"); R1W = srcimg.width(); R1H = srcimg.height(); if(attach==0) { //Attached to Bottom RectPlus = sctH % R1H; toY = (sctH>R1H)? sctH-R1H : 0; //R1Hc = R1H-RectPlus; // Crop height from bottom/Offset from top item = addRect(0, 0, sctW, RectPlus, Qt::NoPen, QBrush(srcimg.copy(0, R1H-RectPlus, R1W, RectPlus)) ); item->setData(0, QString("BackGround%1").arg(sctID) ); item->setPos(x,y); item->setZValue(bgZ); if(sctH >= R1H) { item = addRect(0, 0, sctW, sctH-RectPlus, Qt::NoPen, QBrush(srcimg)); item->setData(0, "BackGround"+QString::number(sctID) ); item->setPos(x,y+RectPlus); item->setZValue(bgZ); } } else { //Attached to Top item = addRect(0, 0, sctW, sctH, Qt::NoPen, QBrush(srcimg)); item->setData(0, QString("BackGround%1").arg(sctID) ); item->setPos(x,y); item->setZValue(bgZ); } } WriteToLog(QtDebugMsg, "acceptedID is "+QString::number(sctID)+" data is "+item->data(0).toString()); WriteToLog(QtDebugMsg, "Draw BG -> Drawed"); }
// ////////////////////////////Drawing the inactive intersection space//////////////////////////////////// void LvlScene::drawSpace() { const long padding = 400000; WriteToLog(QtDebugMsg, QString("Draw intersection space-> Find and remove current")); foreach(QGraphicsItem * spaceItem, items()) { if(spaceItem->data(0).toString()=="Space") { removeItem(spaceItem); delete spaceItem; continue; } if(spaceItem->data(0).toString()=="SectionBorder") { removeItem(spaceItem); delete spaceItem; continue; } } QPolygon bigSpace; QGraphicsItem * item; QGraphicsItem * item2; QVector<QPoint > drawing; int i, j; long l, r, t, b; //x, y, h, w; WriteToLog(QtDebugMsg, QString("Draw intersection space-> Find minimal")); j=-1; do { j++; l = LvlData->sections[j].size_left; r = LvlData->sections[j].size_right; t = LvlData->sections[j].size_top; b = LvlData->sections[j].size_bottom; } while( ((LvlData->sections[j].size_left==0) && (LvlData->sections[j].size_right==0) && (LvlData->sections[j].size_top==0) && (LvlData->sections[j].size_bottom==0)) && (j<LvlData->sections.size()) ); for(i=0; i<LvlData->sections.size(); i++) { if( (LvlData->sections[i].size_left==0) && (LvlData->sections[i].size_right==0) && (LvlData->sections[i].size_top==0) && (LvlData->sections[i].size_bottom==0)) continue; if(LvlData->sections[i].size_left < l) l = LvlData->sections[i].size_left; if(LvlData->sections[i].size_right > r) r = LvlData->sections[i].size_right; if(LvlData->sections[i].size_top < t) t = LvlData->sections[i].size_top; if(LvlData->sections[i].size_bottom > b) b = LvlData->sections[i].size_bottom; } WriteToLog(QtDebugMsg, QString("Draw intersection space-> Draw polygon")); drawing.clear(); drawing.push_back(QPoint(l-padding, t-padding)); drawing.push_back(QPoint(r+padding, t-padding)); drawing.push_back(QPoint(r+padding, b+padding)); drawing.push_back(QPoint(l-padding, b+padding)); drawing.push_back(QPoint(l-padding, t+padding)); bigSpace = QPolygon(drawing); l = LvlData->sections[LvlData->CurSection].size_left; r = LvlData->sections[LvlData->CurSection].size_right; t = LvlData->sections[LvlData->CurSection].size_top; b = LvlData->sections[LvlData->CurSection].size_bottom; WriteToLog(QtDebugMsg, QString("Draw intersection space-> Draw editing hole")); drawing.clear(); drawing.push_back(QPoint(l-1, t-1)); drawing.push_back(QPoint(r+1, t-1)); drawing.push_back(QPoint(r+1, b+1)); drawing.push_back(QPoint(l-1, b+1)); drawing.push_back(QPoint(l-1, t-1)); bigSpace = bigSpace.subtracted(QPolygon(drawing)); WriteToLog(QtDebugMsg, QString("Draw intersection space-> add polygon to Item")); item = addPolygon(bigSpace, QPen(Qt::NoPen), QBrush(Qt::black));//Add inactive space item2 = addPolygon(QPolygon(drawing), QPen(Qt::red, 2)); item->setZValue(spaceZ1); item2->setZValue(spaceZ2); item->setOpacity(qreal(0.4)); item->setData(0, "Space"); item2->setData(0, "SectionBorder"); }
void Visual::paintplayer(map &mapp,int k) { QPen pen(Qt::NoPen); QBrush bonus100(QColor(255, 255, 255), QPixmap(":resource/images/player11.png")); QBrush bonus200(QColor(255, 255, 255), QPixmap(":resource/images/player22.png")); QBrush bonus300(QColor(255, 255, 255), QPixmap(":resource/images/palyer33.png")); QBrush money100(QColor(255, 255, 255), QPixmap(":resource/images/Money100.png")); QBrush money500(QColor(255, 255, 255), QPixmap(":resource/images/Money500.png")); QBrush player1 (QColor(255, 255, 255), QPixmap(":resource/images/player1.png")); QBrush player2 (QColor(255, 255, 255), QPixmap(":resource/images/player2.png")); for (int i = 0; i < mapp.len; i++) { for (int j = 0; j < mapp.wid; j++) { //QGraphicsItem * item = QGraphicsScene.items(i*10,j*10,10,10); QList <QGraphicsItem*>item; item=items(QRectF(i*10, j*10, 10, 10)); if (item.size()>0 && item[0]->data(0) != map::WALL && item[0]->data(0) != map::LIFT_UP && item[0]->data(0) != map::LIFT_DOWN) removeItem(item[0]); if (mapp.floor[i][j][k] == map::BONUS100) { QGraphicsItem * item = addRect(QRectF(i*10, j*10, 10, 10), pen, bonus100); item->setData(0, map::BONUS100); } if (mapp.floor[i][j][k] == map::BONUS200) { QGraphicsItem * item = addRect(QRectF(i*10, j*10, 10, 10), pen, bonus200); item->setData(0, map::BONUS200); } if (mapp.floor[i][j][k] == map::BONUS300) { QGraphicsItem * item = addRect(QRectF(i*10, j*10, 10, 10), pen, bonus300); item->setData(0, map::BONUS300); } if (mapp.floor[i][j][k] == map::MONEY100) { QGraphicsItem * item = addRect(QRectF(i*10, j*10, 10, 10), pen, money100); item->setData(0, map::MONEY100); } if (mapp.floor[i][j][k] == map::MONEY500) { QGraphicsItem * item = addRect(QRectF(i*10, j*10, 10, 10), pen, money500); item->setData(0, map::MONEY500); } if (mapp.floor[i][j][k] == map::PLAYER1) { QGraphicsItem * item = addRect(QRectF(i*10, j*10, 10, 10), pen, player1); item->setData(0, map::PLAYER1); } if (mapp.floor[i][j][k] == map::PLAYER2) { QGraphicsItem * item = addRect(QRectF(i*10, j*10, 10, 10), pen, player2); item->setData(0, map::PLAYER2); } } } }
// refresh ui elements // void BSplineVisDialog::renderScene(QGraphicsScene& scene, bool isPrinter) { scene.clear(); if (ui.showCheckerboard->isChecked()) { RGBAImageType::Pointer image = ImageContainer::CreateBitmap(m_SrcImage, ui.imageOpacity->value()); QPixmap qPixmap = ImageContainer::CreatePixmap(image); scene.addPixmap(qPixmap)->setZValue(-10); } if (ui.showWarpedCheckerboard->isChecked()) { RGBAImageType::Pointer image = ImageContainer::CreateBitmap(m_DstImage, ui.imageOpacity->value()); QPixmap qPixmap = ImageContainer::CreatePixmap(image); scene.addPixmap(qPixmap)->setZValue(-10); } if (ui.showWarpedSlice->isChecked()) { RGBAImageType::Pointer image = ImageContainer::CreateBitmap(m_WarpedSlice, ui.imageOpacity->value()); QPixmap qPixmap = ImageContainer::CreatePixmap(image); scene.addPixmap(qPixmap)->setZValue(-10); } if (m_RefImage.IsNotNull()) { const int gridRes = ui.gridResolution->value(); QPen blackPen = QPen(QColor::fromRgbF(0,0,0,0.5)); blackPen.setWidthF(.1); QPen linePen(QColor::fromRgbF(.5,.5,.5,ui.imageOpacity->value() / 255.0)); if (ui.showCoordinateGrid->isChecked()) { QGraphicsGridItem* originalGrid = new QGraphicsGridItem(); if (isPrinter) { // can printer have alpha value? originalGrid->SetPen(blackPen); } else { originalGrid->SetPen(linePen); } originalGrid->SetResolution(gridRes); originalGrid->SetGrid(gX, gY); scene.addItem(originalGrid); ui.bspView->fitInView(originalGrid, Qt::KeepAspectRatio); } if (ui.showWarpedCoordinateGrid->isChecked()) { QGraphicsGridItem* warpedGrid = new QGraphicsGridItem(); if (isPrinter) { // can printer have alpha value? if (!ui.showNoImage->isChecked()) { blackPen.setColor(QColor::fromRgbF(1, 1, 0)); blackPen.setWidthF(0.2); } warpedGrid->SetPen(blackPen); } else { warpedGrid->SetPen(linePen); } warpedGrid->SetResolution(gridRes); warpedGrid->SetGrid(tX, tY); scene.addItem(warpedGrid); ui.bspView->fitInView(warpedGrid, Qt::KeepAspectRatio); } } if (ui.showDetJacobian->isChecked() && m_DetJacobian.IsNotNull()) { RGBAImageType::Pointer image = ImageContainer::CreateBitmap(m_DetJacobian); QPixmap qDetPixmap = ImageContainer::CreatePixmap(image); scene.addPixmap(qDetPixmap); } if (m_Field.IsNotNull() && ui.showDisplacementField->isChecked()) { FieldIteratorType iter(m_Field, m_Field->GetBufferedRegion()); for (iter.GoToBegin(); !iter.IsAtEnd(); ++iter) { DisplacementFieldType::IndexType idx = iter.GetIndex(); DisplacementFieldType::PointType point; m_Field->TransformIndexToPhysicalPoint(idx, point); VectorType v = iter.Get(); if (v.GetNorm() < 1) { continue; } DisplacementFieldType::PointType point2; point2[0] = point[0] + v[0]; point2[1] = point[1] + v[1]; scene.addLine(point[0], point[1], point2[0], point2[1], QPen(Qt::yellow)); } } if (ui.showWarpedLandmarks->isChecked()) { double sz = ui.landmarkSize->value(); for (int i = 0; i < m_WarpedLandmarks.rows(); i++) { double x = m_WarpedLandmarks[i][0]; double y = m_WarpedLandmarks[i][1]; QGraphicsItem* p = scene.addRect(x - sz, y - sz, sz*2, sz*2, QPen(Qt::yellow), QBrush(Qt::yellow, Qt::SolidPattern)); } } // drawing order is important for correct pick up // only show when showLandmarks is checked // if (ui.showLandmarks->isChecked()) { double sz = ui.landmarkSize->value(); for (int i = 0; i < m_VectorList.size(); i++) { QRectF& xy = m_VectorList[i]; QPen linePen(Qt::yellow); QPen sourcePen(Qt::red); QBrush sourceBrush(Qt::red, Qt::SolidPattern); QPen targetPen(Qt::blue); QBrush targetBrush(Qt::blue, Qt::SolidPattern); linePen.setWidthF(sz * .5); if (isPrinter) { linePen.setWidthF(sz); linePen.setColor(QColor::fromRgbF(0.3, 0.6, 0.3)); } scene.addLine(xy.left(), xy.top(), xy.right(), xy.bottom(), linePen); QGraphicsItem* dx = scene.addEllipse(xy.left() - sz, xy.top() - sz, sz*2, sz*2, sourcePen, sourceBrush); QGraphicsItem* dy = scene.addEllipse(xy.right() - sz, xy.bottom() - sz, sz*2, sz*2, targetPen, targetBrush); dx->setData(1, i); dy->setData(2, i); } } }
dmz::QtCanvasObjectGroup * dmz::QtPluginCanvasObjectBasic::_create_item ( ObjectStruct &os, QGraphicsItem *parent, const Config &ItemList, HashTableStringTemplate<String> &table) { QtCanvasObjectGroup *group (0); if (parent) { group = new QtCanvasObjectGroup (parent); QGraphicsItem *item (0); ConfigIterator it; Config cd; Float32 z (1.0); while (ItemList.get_next_config (it, cd)) { const String DataName (cd.get_name ().to_lower ()); const String ItemName (config_to_string ("name", cd)); const Boolean Isect (config_to_boolean ("isect", cd, True)); if (DataName == "image") { item = _create_image_item (os, group, cd, table); if (Isect) { item->setData (QtCanvasObjectHandleIndex, (quint64)os.ObjHandle); } } else if (DataName == "text") { item = _create_text_item (os, group, cd); if (Isect) { item->setData (QtCanvasObjectHandleIndex, (quint64)os.ObjHandle); } } else if (DataName == "group") { item = _create_item (os, group, cd, table); } if (item) { item->setFlag (QGraphicsItem::ItemIgnoresParentOpacity, true); item->setFlag (QGraphicsItem::ItemDoesntPropagateOpacityToChildren, true); item->setZValue (z++); if (ItemName) { String name (ItemName); name << "." << os.ObjHandle; item->setData (QtCanvasObjectNameIndex, name.get_buffer ()); os.itemTable.store (ItemName, item); } } } } return group; }
void BoardFile::parse(const QString &contents, QGraphicsScene *scene) { #ifndef Q_OS_WIN const QStringList lines = contents.split("\n", QString::SkipEmptyParts); #else const QStringList lines = contents.split("\r\n", QString::SkipEmptyParts); #endif quint32 lineNum = 0; QPen pen; QBrush brush; qreal z = 0.0; double unitMult = 1.0; foreach(const QString &line, lines) { ++lineNum; if(line.startsWith("#")) continue; QStringList parts = line.split(" ", QString::SkipEmptyParts); quint16 args = parts.size() - 1; if(parts[0] == "line") { if(args != 4) { error(lineNum, 4, args); continue; } QGraphicsItem *item = scene->addLine(parts[1].toDouble() * unitMult, parts[2].toDouble() * unitMult, parts[3].toDouble() * unitMult, parts[4].toDouble() * unitMult, pen); item->setData(0, BoardFile::Real); item->setZValue(z); } else if(parts[0] == "dec-line") { if(args != 4) { error(lineNum, 4, args); continue; } QGraphicsItem *item = scene->addLine(parts[1].toDouble() * unitMult, parts[2].toDouble() * unitMult, parts[3].toDouble() * unitMult, parts[4].toDouble() * unitMult, pen); item->setData(0, BoardFile::Fake); item->setZValue(z); } else if(parts[0] == "tape") { if(args != 4) { error(lineNum, 4, args); continue; } QGraphicsItem *item = scene->addLine(parts[1].toDouble() * unitMult, parts[2].toDouble() * unitMult, parts[3].toDouble() * unitMult, parts[4].toDouble() * unitMult, pen); item->setData(0, BoardFile::Tape); item->setZValue(z); } else if(parts[0] == "set-z") { if(args != 1) { error(lineNum, 1, args); continue; } z = parts[1].toDouble(); } else if(parts[0] == "dec-rect") { if(args != 4) { error(lineNum, 4, args); continue; } QGraphicsItem *item = scene->addRect(parts[1].toDouble() * unitMult, parts[2].toDouble() * unitMult, parts[3].toDouble() * unitMult, parts[4].toDouble() * unitMult, pen, brush); item->setData(0, BoardFile::Fake); item->setZValue(z); } else if(parts[0] == "pen") { if(args != 2) { error(lineNum, 2, args); continue; } pen = QPen(QBrush(QColor(parts[1])), parts[2].toUInt()); } else if(parts[0] == "brush") { if(args != 1) { error(lineNum, 1, args); continue; } brush = QBrush(QColor(parts[1])); } else if(parts[0] == "set-units") { if(args != 1) { error(lineNum, 1, args); continue; } if(parts[1] == "in") { unitMult = 2.54; } else if(parts[1] == "cm") { unitMult = 1.0; } else error(lineNum, parts[1]); } else error(lineNum, parts[0]); }
//复制函 void QMultiCopy::MuCopyList(QGraphicsItem &pItem,int &CopyCount,QStringList NormKeyboardstr) { QMessageBox msg(QMessageBox::Warning,PRO_FULL_NAME,tr(""), 0,this,Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint); msg.addButton(tr("确定"),QMessageBox::AcceptRole); QLibrary lib("MultiCopy.dll"); if (!lib.load()) { msg.setText(tr("MultiCopy.dll未找到!")); msg.exec(); } typedef Keyboard (*ADDPROC)( QStringList *,Keyboard ,int , int *, int *,int ); ADDPROC muliticopy = NULL; muliticopy = (ADDPROC)lib.resolve("Multicpy"); if (NULL == muliticopy) { msg.setText(tr("文件损坏请重新安装应用程序!")); msg.exec(); } datalist = qVariantValue<QStringList>(pItem.data(GROUP_DATALIST_KEY)); QStringList keyboardid=GetKeyboardID(pItem); QStringList lFactoryandModel;//存储厂家和型号 for(int i=0;i<NormKeyboardstr.length();i++) { pwnd->StringToKeyboard(TempKeyboard,NormKeyboardstr.at(i)); if(TempKeyboard.nConnectType==1) { if(pwnd->m_pSamSysParame->m_qvcPlcCommunicate.size()>0) { lFactoryandModel.append(pwnd->m_pSamSysParame->m_qvcPlcCommunicate.at(0).sDiviceType);//厂家 lFactoryandModel.append(pwnd->m_pSamSysParame->m_qvcPlcCommunicate.at(0).sDiviceModel);//型号 } else//连接不存在 { msg.setText(tr("该控件所使用的连接不存在或已被删除!")); msg.exec(); return; } } else if(TempKeyboard.nConnectType==2) { if(pwnd->m_pSamSysParame->m_qvcPlcCommunicate.size()>1) { lFactoryandModel.append(pwnd->m_pSamSysParame->m_qvcPlcCommunicate.at(1).sDiviceType);//厂家 lFactoryandModel.append(pwnd->m_pSamSysParame->m_qvcPlcCommunicate.at(1).sDiviceModel);//型号 } else//连接不存在 { msg.setText(tr("该控件所使用的连接不存在或已被删除!")); msg.exec(); return; } } else if(TempKeyboard.nConnectType==3) { if(pwnd->m_pSamSysParame->m_qvcPlcCommunicate.size()>2) { lFactoryandModel.append(pwnd->m_pSamSysParame->m_qvcPlcCommunicate.at(2).sDiviceType);//厂家 lFactoryandModel.append(pwnd->m_pSamSysParame->m_qvcPlcCommunicate.at(2).sDiviceModel);//型号 } else//连接不存在 { msg.setText(tr("该控件所使用的连接不存在或已被删除!")); msg.exec(); return; } } Keyboard Getkeyboard=muliticopy(&lFactoryandModel,TempKeyboard,ui->Increse_Interval->value(),&CopyCount,0,0); datalist.replace(keyboardid.at(i).toInt(),pwnd->KeyboardToString(Getkeyboard)); if(NormKeyboardstr.length()-i>1)//为了防止复制一个控件的多个Keyboard值时,CopyCount不应该累加加的情况 { CopyCount--; } } pItem.setData(GROUP_DATALIST_KEY,datalist); lib.unload();//释放dll文件 }
void FenetrePrincipale::AfficherCarte() const { int xZero, yZero; int l = carteGraphicsScene->getLargeurUnite(), h = carteGraphicsScene->getHauteurUnite(); QPen styloNoir; styloNoir.setWidth(2); styloNoir.setColor(QColor("black")); QPen styloBleu; styloBleu.setWidth(10); styloBleu.setColor(QColor("blue")); Carte* carte = JoueurSingleton::getInstance()->getCarte(); for(int i=0; i<16; i++) { for(int j=0; j<16; j++) { xZero = j*l; yZero = i*h; if(carte->getCase(j, i) == CHEMIN_NORD) { QPixmap butPixmap(QString(":/images/chemin_N.jpg")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); //tmp->setScale(ScalePourUnite(butPixmap, l, h)); tmp->setPos(xZero, yZero); tmp->setData(0, "CHEMIN_NORD"); } else if(carte->getCase(j, i) == CHEMIN_SUD) { QPixmap butPixmap(QString(":/images/chemin_S.jpg")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); tmp->setPos(xZero, yZero); tmp->setData(0, "CHEMIN_SUD"); } else if(carte->getCase(j, i) == CHEMIN_OUEST) { QPixmap butPixmap(QString(":/images/chemin_W.jpg")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); tmp->setPos(xZero, yZero); tmp->setData(0, "CHEMIN_OUEST"); } else if(carte->getCase(j, i) == CHEMIN_EST) { QPixmap butPixmap(QString(":/images/chemin_E.jpg")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); tmp->setPos(xZero, yZero); tmp->setData(0, "CHEMIN_EST"); } else if(carte->getCase(j, i) == CHEMIN_NO) { if(carte->getCase(j, i-1) == CHEMIN_NORD || carte->getCase(j, i-1) == CHEMIN_SUD) { QPixmap butPixmap(QString(":/images/chemin_SE.jpg")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); tmp->setPos(xZero, yZero); tmp->setData(0, "CHEMIN_NO"); } else { QPixmap butPixmap(QString(":/images/chemin_NW.jpg")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); tmp->setPos(xZero, yZero); tmp->setData(0, "CHEMIN_NO"); } } else if(carte->getCase(j, i) == CHEMIN_SE) { if(carte->getCase(j, i-1) == CHEMIN_NORD || carte->getCase(j, i-1) == CHEMIN_SUD) { QPixmap butPixmap(QString(":/images/chemin_SE.jpg")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); tmp->setPos(xZero, yZero); tmp->setData(0, "CHEMIN_SE"); } else { QPixmap butPixmap(QString(":/images/chemin_NW.jpg")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); tmp->setPos(xZero, yZero); tmp->setData(0, "CHEMIN_SE"); } } else if(carte->getCase(j, i) == CHEMIN_NE) { if(carte->getCase(j, i-1) == CHEMIN_NORD || carte->getCase(j, i-1) == CHEMIN_SUD) { QPixmap butPixmap(QString(":/images/chemin_SW.jpg")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); tmp->setPos(xZero, yZero); tmp->setData(0, "CHEMIN_NE"); } else { QPixmap butPixmap(QString(":/images/chemin_NE.jpg")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); tmp->setPos(xZero, yZero); tmp->setData(0, "CHEMIN_NE"); } } else if(carte->getCase(j, i) == CHEMIN_SO) { if(carte->getCase(j, i-1) == CHEMIN_NORD || carte->getCase(j, i-1) == CHEMIN_SUD) { QPixmap butPixmap(QString(":/images/chemin_SW.jpg")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); tmp->setPos(xZero, yZero); tmp->setData(0, "CHEMIN_SO"); } else { QPixmap butPixmap(QString(":/images/chemin_NE.jpg")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); tmp->setPos(xZero, yZero); tmp->setData(0, "CHEMIN_SO"); } } else if(carte->getCase(j, i) == BUT_ENNEMIS) { QPixmap butPixmap(QString(":/images/but.png")); butPixmap = butPixmap.scaled(l, h); QGraphicsPixmapItem* tmp = carteGraphicsScene->addPixmap(butPixmap); tmp->setPos(xZero, yZero); tmp->setData(0, "BUT_ENNEMIS"); } else if(carte->getCase(j, i) == DEPART_NORD || carte->getCase(j, i) == DEPART_SUD || carte->getCase(j, i) == DEPART_OUEST || carte->getCase(j, i) == DEPART_EST) { QGraphicsItem* item = carteGraphicsScene->addRect(xZero, yZero, l, h, styloBleu, Qt::blue); item->setData(0, "DEPART"); } else if(carte->getCase(j, i) == BOUE) { QGraphicsItem* item = carteGraphicsScene->addRect(xZero, yZero, l, h, QPen(Qt::darkGreen), Qt::darkGreen); item->setData(0, "BOUE"); } else { QGraphicsItem* item = carteGraphicsScene->addRect(xZero, yZero, l, h, QPen(Qt::transparent)); item->setData(0, "LIBRE"); } } } }
/***************************************************************** *函数名称:reDrawHisDataDisplay *函数功能:当历史数据收集器的长度发生变化的时候,点击确定按钮后重绘场景中的 * 历史数据显示器控件 *edit by zqh *2011-9-27 ****************************************************************/ void QHisdDataLoggerDialog::reDrawHisDataDisplay() { int totalSceneNum = pwnd->pSceneSheet.size(); QList<QGraphicsItem *> Items; QGraphicsItem *pItem = NULL; QGraphicsItem *pNewItem = NULL; int nID = 0; int i = 0; int j = 0; int k = 0; int nsheet = pwnd->nActiveSheetIndex; int nOldNum = 0; //原历史数据收集器取样长度 int nNewNum = pwnd->m_pSamSysParame->m_historyLogData.nSampleLen;//历史数据收集器取样长度 QStringList *sList = new QStringList(); QStringList slist; Items.clear(); for(i = 0; i < totalSceneNum;i++) //扫描所有页面 { pwnd->nActiveSheetIndex = i; pwnd->pView->setScene(pwnd->pSceneSheet[i]); QPainterPath path; path.addRect(0,0,pwnd->pSceneSheet[i]->width(),pwnd->pSceneSheet[i]->height()); pwnd->pSceneSheet[i]->setSelectionArea(path); Items = pwnd->pSceneSheet[i]->selectedItems(); foreach(QGraphicsItem *item,Items) item->setSelected(false); for(j = 0; j < Items.size(); j++) //扫描当前页面的所有控件 { pItem = Items.at(j);//->topLevelItem(); nID = pItem->data(GROUP_TYPE_KEY).toInt(); //取控件的Key号 sList->clear(); slist.clear(); switch(nID) { case GROUP_TYPE_HISDATAALARM: //历史数据显示器 { slist = pItem->data(GROUP_DATALIST_KEY).toStringList(); //取出每个item的所有数据 for(k = 0; k < slist.size();k++) sList->append(slist.at(k)); nOldNum = sList->at(99).toInt(); //37 // if(nNewNum != nOldNum)//长度没有改变的时候也要刷新 因为名称会改变 //Change by Dylan 2012-3-13 { sList->replace(99,QString("%1").arg(nNewNum)); //37 int val = nNewNum - nOldNum; if(val < 0) //配方数减少 { for(k = 0; k < -val;k++) sList->removeLast(); } else if(val > 0) //配方数增加 { for(k = 0; k < val;k++) sList->append("1"); } QDrawGraphics *pDraw = new QDrawGraphics; pNewItem = pDraw->drawHistroyDataDisplayItem(sList); //重绘配方显示器 pNewItem->setData(GROUP_TYPE_KEY,QVariant(GROUP_TYPE_HISDATAALARM)); pNewItem->setData(GROUP_DATALIST_KEY,*sList); if(pDraw) { delete pDraw; pDraw = NULL; } pwnd->OnDoubleClik(pItem,pNewItem); } //end if } //end case break; } //end switch } //end second for } //end first for pwnd->nActiveSheetIndex = nsheet ; //reset active sheet page pwnd->pView->setScene(pwnd->pSceneSheet[nsheet]); }