void FaceItem::slotSuggestionAccepted() { switchToEditMode(); d->faceName->setHtml(QString::fromLatin1("<b>") + d->name + QString::fromLatin1("</b>")); accepted(); emit suggestionAcceptButtonClicked(this->text(), this->originalRect()); }
FaceItem::FaceItem(QGraphicsItem* const parent, QGraphicsScene* const scene, const QRect& rect, double scale, const QString& name, double originalscale) : QGraphicsObject(parent), d(new Private) { setAcceptHoverEvents(true); d->origScale = originalscale; d->scale = scale; d->origRect = rect; d->sceneWidth = scene->width(); d->sceneHeight = scene->height(); // Scale all coordinates to fit the initial size of the scene d->x1 = rect.topLeft().x() * scale; d->y1 = rect.topLeft().y() * scale; d->x2 = rect.bottomRight().x() * scale; d->y2 = rect.bottomRight().y() * scale; // A QRect containing coordinates for the face rectangle QRect scaledRect; scaledRect.setTopLeft(QPoint(d->x1, d->y1)); scaledRect.setBottomRight(QPoint(d->x2, d->y2)); // marquee FancyRect* const fancy = new FancyRect(scaledRect); d->faceMarquee = new Marquee(fancy); scene->addItem(d->faceMarquee); // Make a new QGraphicsTextItem for writing the name text, and a new QGraphicsRectItem to draw a good-looking, semi-transparent bounding box. d->nameRect = new QGraphicsRectItem(0); scene->addItem(d->nameRect); d->faceName = new QGraphicsTextItem(name, 0); scene->addItem(d->faceName); // Make the bounding box for the name update itself to cover all the text whenever contents are changed QTextDocument* const doc = d->faceName->document(); QTextOption o; o.setAlignment(Qt::AlignCenter); doc->setDefaultTextOption(o); // Get coordinates of the name relative the the scene QRectF r = d->faceName->mapRectToScene(d->faceName->boundingRect()); // Draw the bounding name rectangle with the scene coordinates d->nameRect->setRect(r); QPen p(QColor(QString::fromLatin1("white"))); p.setWidth(3); d->nameRect->setPen(p); d->nameRect->setBrush(QBrush(QColor(QString::fromLatin1("black")))); d->nameRect->setOpacity(0.6); d->nameRect->show(); // Draw the name input item d->faceName->setDefaultTextColor(QColor(QString::fromLatin1("white"))); d->faceName->setFont(QFont(QString::fromLatin1("Helvetica"), 9)); d->faceName->setTextInteractionFlags(Qt::TextEditorInteraction); d->faceName->setOpacity(1); //--------------------- QPixmap rejectPix = QIcon::fromTheme(QString::fromLatin1("window-close")).pixmap(16, 16); d->rejectButton = new Button( rejectPix, rejectPix); scene->addItem(d->rejectButton); d->rejectButton->show(); QPixmap acceptPix = QIcon::fromTheme(QString::fromLatin1("dialog-ok-apply")).pixmap(16, 16); d->acceptButton = new Button( acceptPix, acceptPix); scene->addItem(d->acceptButton); //d->acceptButton->show(); d->suggestionRejectButton = new Button(rejectPix, rejectPix); scene->addItem(d->suggestionRejectButton); //d->suggestionAcceptButton->hide(); d->suggestionAcceptButton = new Button(acceptPix, acceptPix); scene->addItem(d->suggestionAcceptButton); //d->suggestionRejectButton->hide(); update(); switchToEditMode(); d->acceptButton->hide(); connect(d->rejectButton, &Button::clicked, this, &FaceItem::reject); connect(d->acceptButton, &Button::clicked, this, &FaceItem::accepted); connect(d->suggestionAcceptButton, &Button::clicked, this, &FaceItem::slotSuggestionAccepted); connect(d->suggestionRejectButton, &Button::clicked, this, &FaceItem::slotSuggestionRejected); connect(doc, SIGNAL(contentsChanged()), this, SLOT(update())); connect(d->faceMarquee, &Marquee::changed, this, &FaceItem::update); }
void FaceItem::slotSuggestionRejected() { switchToEditMode(); d->faceName->setHtml("<b>" + QString() + "</b>"); emit suggestionRejectButtonClicked(this->text(), this->originalRect()); }