本文整理汇总了C++中QPointF::toPoint方法的典型用法代码示例。如果您正苦于以下问题:C++ QPointF::toPoint方法的具体用法?C++ QPointF::toPoint怎么用?C++ QPointF::toPoint使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QPointF
的用法示例。
在下文中一共展示了QPointF::toPoint方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: canvasMoveEvent
void QgsMapToolAnnotation::canvasMoveEvent( QMouseEvent * e )
{
QgsAnnotationItem* sItem = selectedItem();
if ( sItem && ( e->buttons() & Qt::LeftButton ) )
{
if ( mCurrentMoveAction == QgsAnnotationItem::MoveMapPosition )
{
sItem->setMapPosition( toMapCoordinates( e->pos() ) );
sItem->update();
}
else if ( mCurrentMoveAction == QgsAnnotationItem::MoveFramePosition )
{
if ( sItem->mapPositionFixed() )
{
sItem->setOffsetFromReferencePoint( sItem->offsetFromReferencePoint() + ( e->posF() - mLastMousePosition ) );
}
else
{
QPointF newCanvasPos = sItem->pos() + ( e->posF() - mLastMousePosition );
sItem->setMapPosition( toMapCoordinates( newCanvasPos.toPoint() ) );
}
sItem->update();
}
else if ( mCurrentMoveAction != QgsAnnotationItem::NoAction )
{
//handle the frame resize actions
QSizeF size = sItem->frameSize();
double xmin = sItem->offsetFromReferencePoint().x();
double ymin = sItem->offsetFromReferencePoint().y();
double xmax = xmin + size.width();
double ymax = ymin + size.height();
if ( mCurrentMoveAction == QgsAnnotationItem::ResizeFrameRight ||
mCurrentMoveAction == QgsAnnotationItem::ResizeFrameRightDown ||
mCurrentMoveAction == QgsAnnotationItem::ResizeFrameRightUp )
{
xmax += e->posF().x() - mLastMousePosition.x();
}
if ( mCurrentMoveAction == QgsAnnotationItem::ResizeFrameLeft ||
mCurrentMoveAction == QgsAnnotationItem::ResizeFrameLeftDown ||
mCurrentMoveAction == QgsAnnotationItem::ResizeFrameLeftUp )
{
xmin += e->posF().x() - mLastMousePosition.x();
}
if ( mCurrentMoveAction == QgsAnnotationItem::ResizeFrameUp ||
mCurrentMoveAction == QgsAnnotationItem::ResizeFrameLeftUp ||
mCurrentMoveAction == QgsAnnotationItem::ResizeFrameRightUp )
{
ymin += e->posF().y() - mLastMousePosition.y();
}
if ( mCurrentMoveAction == QgsAnnotationItem::ResizeFrameDown ||
mCurrentMoveAction == QgsAnnotationItem::ResizeFrameLeftDown ||
mCurrentMoveAction == QgsAnnotationItem::ResizeFrameRightDown )
{
ymax += e->posF().y() - mLastMousePosition.y();
}
//switch min / max if necessary
double tmp;
if ( xmax < xmin )
{
tmp = xmax; xmax = xmin; xmin = tmp;
}
if ( ymax < ymin )
{
tmp = ymax; ymax = ymin; ymin = tmp;
}
sItem->setOffsetFromReferencePoint( QPointF( xmin, ymin ) );
sItem->setFrameSize( QSizeF( xmax - xmin, ymax - ymin ) );
sItem->update();
}
}
else if ( sItem )
{
QgsAnnotationItem::MouseMoveAction moveAction = sItem->moveActionForPosition( e->posF() );
if ( mCanvas )
{
mCanvas->setCursor( QCursor( sItem->cursorShapeForAction( moveAction ) ) );
}
}
mLastMousePosition = e->posF();
}
示例2: mouseDoubleClickEvent
void Viewer::mouseDoubleClickEvent(QMouseEvent * e){
if (e->button() == Qt::LeftButton && (e->modifiers() == Qt::NoButton)){
QPointF point = e->posF();
bool found;
int tid = curTerr;
if (tid <0 || tid > terrains.size())
return;
Terrain* terrain = terrains[tid];
qglviewer::Vec selectedPoint = camera()->pointUnderPixel(point.toPoint(), found); //QVector3D(orig.x,orig.y,orig.z)+10000*QVector3D(dir.x,dir.y,dir.z);//
if (!found) return;
QVector3D I2 = QVector3D(selectedPoint.x,selectedPoint.y,selectedPoint.z);
float sc = terrain->wsc/terrain->width;
I2/=sc;
float xs = I2.x()+terrain->width/2;
float ys = I2.y()+terrain->height/2;
xs = (int) xs;
ys = (int) ys;
//qWarning("Intersection is %d %d", (int)xs, (int)ys);
//qWarning("Selected point is %f %f %f\n",selectedPoint.x,selectedPoint.y,selectedPoint.z);
int id = (xs)+(ys)*terrain->width;
if (!(xs>0 && ys>0 && xs<terrain->width-1 && ys< terrain->height-1)){
return;
}
QVector3D npoint = terrain->verts[id].location;
int index = terrain->artifacts.indexOf(npoint);
if (index==-1 || terrain->verts[id].colour.y()!=DEF_COL.y()){
for (int j=-5; j<5; j++){
for (int i=-5; i<5; i++){
id = (xs+i)+(ys+j)*terrains[tid]->width;
if (xs+i>0 && ys+j>0 && xs+i<terrain->width-1 && ys+j< terrain->height-1){
index = terrain->artifacts.indexOf(terrain->verts[id].location);
if (index!=-1){
xs += i; ys += j;
npoint = terrain->verts[id].location;
break;
}
}
}
if (index!=-1)
break;
}
}
if (index==-1){
QMenu menu("Severity", this );
QMap<QAction*, float> menuMap;
menuMap[menu.addAction("Slightly severe ")] = 1.1;
menuMap[menu.addAction("Moderately severe")] = 1.35;
menuMap[menu.addAction("Very severe")] = 3.0;
QAction* action = menu.exec(e->globalPos());
if (!action)
return;
terrain->artifacts.push_back(QVector3D( npoint.x(), npoint.y(), npoint.z()));
terrain->severity.push_back(menuMap[action]);
for (int j=-10; j<10; j++)
for (int i=-10; i<10; i++){
id = (xs+i)+(ys+j)*terrain->width;
if (xs+i>0 && ys+j>0 && xs+i<terrain->width-1 && ys+j< terrain->height-1){
QVector4D& col = terrain->verts[id].colour;
col.setY(col.y()*terrain->severity.back());
//terrains[tid]->verts[id].colour* //= QVector4D(1.,0,0,0.1);
}
}
}
else {
for (int j=-10; j<10; j++)
for (int i=-10; i<10; i++){
id = (xs+i)+(ys+j)*terrain->width;
if (xs+i>0 && ys+j>0 && xs+i<terrain->width-1 && ys+j< terrain->height-1){
QVector4D& col = terrain->verts[id].colour;
col.setY(col.y()/terrain->severity[index]);
//terrains[tid]->verts[id].colour* //= QVector4D(1.,0,0,0.1);
}
}
terrain->artifacts.erase(terrain->artifacts.begin()+index);
terrain->severity.erase(terrain->severity.begin()+index);
terrain->updateVerts();
}
QString str = QString::number(xs)+" " +QString::number(ys);
//displayMessage(str,5000);
terrain->updateVerts();
updateGL();
return;
}
else
QGLViewer::mouseDoubleClickEvent(e);
}
示例3: drawStroke
void BrushTool::drawStroke()
{
StrokeTool::drawStroke();
QList<QPointF> p = m_pStrokeManager->interpolateStroke();
Layer* layer = mEditor->layers()->currentLayer();
if ( layer->type() == Layer::BITMAP )
{
for ( int i = 0; i < p.size(); i++ )
{
p[ i ] = mEditor->view()->mapScreenToCanvas( p[ i ] );
}
qreal opacity = mCurrentPressure / 2;
mCurrentWidth = properties.width;
qreal brushWidth = mCurrentWidth;
qreal brushStep = (0.5 * brushWidth) - ((properties.feather/100.0) * brushWidth * 0.5);
brushStep = qMax( 1.0, brushStep );
BlitRect rect;
QPointF a = lastBrushPoint;
QPointF b = getCurrentPoint();
qreal distance = 4 * QLineF( b, a ).length();
int steps = qRound( distance ) / brushStep;
for ( int i = 0; i < steps; i++ )
{
QPointF point = lastBrushPoint + ( i + 1 ) * ( brushStep )* ( b - lastBrushPoint ) / distance;
rect.extend( point.toPoint() );
mScribbleArea->drawBrush( point,
brushWidth,
properties.feather,
mEditor->color()->frontColor(),
opacity );
if ( i == ( steps - 1 ) )
{
lastBrushPoint = point;
}
}
int rad = qRound( brushWidth ) / 2 + 2;
mScribbleArea->refreshBitmap( rect, rad );
}
else if ( layer->type() == Layer::VECTOR )
{
qreal brushWidth = properties.width * mCurrentPressure;
int rad = qRound( ( brushWidth / 2 + 2 ) * mEditor->view()->scaling() );
QPen pen( mEditor->color()->frontColor(),
brushWidth * mEditor->view()->scaling(),
Qt::SolidLine,
Qt::RoundCap,
Qt::RoundJoin );
if ( p.size() == 4 )
{
QPainterPath path( p[ 0 ] );
path.cubicTo( p[ 1 ],
p[ 2 ],
p[ 3 ] );
mScribbleArea->drawPath( path, pen, Qt::NoBrush, QPainter::CompositionMode_Source );
mScribbleArea->refreshVector( path.boundingRect().toRect(), rad );
}
}
}
示例4:
void GraphicsDirectedEdge::
set_stop(QPointF p)
{
set_stop(p.toPoint());
}
示例5: checkInvariants
bool KisZoomAndPanTest::checkInvariants(const QPointF &baseFlakePoint,
const QPoint &oldOffset,
const QPointF &oldPreferredCenter,
qreal oldZoom,
const QPoint &newOffset,
const QPointF &newPreferredCenter,
qreal newZoom,
const QPointF &newTopLeft,
const QSize &oldDocumentSize)
{
qreal k = newZoom / oldZoom;
QPointF expectedOffset = oldOffset + (k - 1) * baseFlakePoint;
QPointF expectedPreferredCenter = oldPreferredCenter + (k - 1) * baseFlakePoint;
qreal oldPreferredCenterFractionX = 1.0 * oldPreferredCenter.x() / oldDocumentSize.width();
qreal oldPreferredCenterFractionY = 1.0 * oldPreferredCenter.y() / oldDocumentSize.height();
qreal roundingTolerance =
qMax(qreal(1.0), qMax(oldPreferredCenterFractionX, oldPreferredCenterFractionY) / k);
/**
* In the computation of the offset two roundings happen:
* first for the computation of oldOffset and the second
* for the computation of newOffset. So the maximum tolerance
* should equal 2.
*/
bool offsetAsExpected =
compareWithRounding(expectedOffset, QPointF(newOffset), 2 * roundingTolerance);
/**
* Rounding for the preferred center happens due to the rounding
* of the document size while zooming. The wider the step of the
* zooming, the bigger tolerance should be
*/
bool preferredCenterAsExpected =
compareWithRounding(expectedPreferredCenter, newPreferredCenter,
roundingTolerance);
bool topLeftAsExpected = newTopLeft.toPoint() == -newOffset;
if (!offsetAsExpected ||
!preferredCenterAsExpected ||
!topLeftAsExpected) {
dbgKrita << "***** ZOOM ****************";
if(!offsetAsExpected) {
dbgKrita << " ### Offset invariant broken";
}
if(!preferredCenterAsExpected) {
dbgKrita << " ### Preferred center invariant broken";
}
if(!topLeftAsExpected) {
dbgKrita << " ### TopLeft invariant broken";
}
dbgKrita << ppVar(expectedOffset);
dbgKrita << ppVar(expectedPreferredCenter);
dbgKrita << ppVar(oldOffset) << ppVar(newOffset);
dbgKrita << ppVar(oldPreferredCenter) << ppVar(newPreferredCenter);
dbgKrita << ppVar(oldPreferredCenterFractionX);
dbgKrita << ppVar(oldPreferredCenterFractionY);
dbgKrita << ppVar(oldZoom) << ppVar(newZoom);
dbgKrita << ppVar(baseFlakePoint);
dbgKrita << ppVar(newTopLeft);
dbgKrita << ppVar(roundingTolerance);
dbgKrita << "***************************";
}
return offsetAsExpected && preferredCenterAsExpected && topLeftAsExpected;
}
示例6: mousePressed
void CreateObjectTool::mousePressed(QGraphicsSceneMouseEvent *event)
{
// Check if we are already creating a new map object
if (mNewMapObjectItem) {
switch (mMode) {
case CreateRectangle:
case CreateTile:
case CreateEllipse:
if (event->button() == Qt::RightButton)
cancelNewMapObject();
break;
case CreatePolygon:
case CreatePolyline:
if (event->button() == Qt::RightButton) {
finishOrCancelPolygon();
} else if (event->button() == Qt::LeftButton) {
QPolygonF current = mNewMapObjectItem->mapObject()->polygon();
QPolygonF next = mOverlayPolygonObject->polygon();
// If the last position is still the same, ignore the click
if (next.last() == current.last())
return;
// Assign current overlay polygon to the new object
mNewMapObjectItem->setPolygon(next);
// Add a new editable point to the overlay
next.append(next.last());
mOverlayPolygonItem->setPolygon(next);
}
break;
}
return;
}
if (event->button() != Qt::LeftButton) {
AbstractObjectTool::mousePressed(event);
return;
}
ObjectGroup *objectGroup = currentObjectGroup();
if (!objectGroup || !objectGroup->isVisible())
return;
const MapRenderer *renderer = mapDocument()->renderer();
QPointF tileCoords;
if (mMode == CreateTile) {
if (!mTile)
return;
const QPointF diff(-mTile->width() / 2, mTile->height() / 2);
tileCoords = renderer->screenToTileCoords(event->scenePos() + diff);
} else {
tileCoords = renderer->screenToTileCoords(event->scenePos());
}
bool snapToGrid = Preferences::instance()->snapToGrid();
bool snapToFineGrid = Preferences::instance()->snapToFineGrid();
if (event->modifiers() & Qt::ControlModifier) {
snapToGrid = !snapToGrid;
snapToFineGrid = false;
}
if (snapToFineGrid) {
int gridFine = Preferences::instance()->gridFine();
tileCoords = (tileCoords * gridFine).toPoint();
tileCoords /= gridFine;
} else if (snapToGrid)
tileCoords = tileCoords.toPoint();
const QPointF pixelCoords = renderer->tileToPixelCoords(tileCoords);
startNewMapObject(pixelCoords, objectGroup);
}
示例7: sendWidgetMouseEvent
/*!
\internal
*/
void QGraphicsProxyWidgetPrivate::sendWidgetMouseEvent(QGraphicsSceneMouseEvent *event)
{
if (!event || !widget || !widget->isVisible())
return;
Q_Q(QGraphicsProxyWidget);
// Find widget position and receiver.
QPointF pos = event->pos();
QPointer<QWidget> alienWidget = widget->childAt(pos.toPoint());
QPointer<QWidget> receiver = alienWidget ? alienWidget : widget;
if (QWidgetPrivate::nearestGraphicsProxyWidget(receiver) != q)
return; //another proxywidget will handle the events
// Translate QGraphicsSceneMouse events to QMouseEvents.
QEvent::Type type = QEvent::None;
switch (event->type()) {
case QEvent::GraphicsSceneMousePress:
type = QEvent::MouseButtonPress;
if (!embeddedMouseGrabber)
embeddedMouseGrabber = receiver;
else
receiver = embeddedMouseGrabber;
break;
case QEvent::GraphicsSceneMouseRelease:
type = QEvent::MouseButtonRelease;
if (embeddedMouseGrabber)
receiver = embeddedMouseGrabber;
break;
case QEvent::GraphicsSceneMouseDoubleClick:
type = QEvent::MouseButtonDblClick;
if (!embeddedMouseGrabber)
embeddedMouseGrabber = receiver;
else
receiver = embeddedMouseGrabber;
break;
case QEvent::GraphicsSceneMouseMove:
type = QEvent::MouseMove;
if (embeddedMouseGrabber)
receiver = embeddedMouseGrabber;
break;
default:
Q_ASSERT_X(false, "QGraphicsProxyWidget", "internal error");
break;
}
if (!lastWidgetUnderMouse) {
QApplicationPrivate::dispatchEnterLeave(embeddedMouseGrabber ? embeddedMouseGrabber : widget, 0);
lastWidgetUnderMouse = widget;
}
// Map event position from us to the receiver
pos = mapToReceiver(pos, receiver);
// Send mouse event.
QMouseEvent *mouseEvent = QMouseEvent::createExtendedMouseEvent(type, pos,
receiver->mapToGlobal(pos.toPoint()), event->button(),
event->buttons(), event->modifiers());
QWidget *embeddedMouseGrabberPtr = (QWidget *)embeddedMouseGrabber;
QApplicationPrivate::sendMouseEvent(receiver, mouseEvent, alienWidget, widget,
&embeddedMouseGrabberPtr, lastWidgetUnderMouse, event->spontaneous());
embeddedMouseGrabber = embeddedMouseGrabberPtr;
// Handle enter/leave events when last button is released from mouse
// grabber child widget.
if (embeddedMouseGrabber && type == QEvent::MouseButtonRelease && !event->buttons()) {
Q_Q(QGraphicsProxyWidget);
if (q->rect().contains(event->pos()) && q->acceptsHoverEvents())
lastWidgetUnderMouse = alienWidget ? alienWidget : widget;
else // released on the frame our outside the item, or doesn't accept hover events.
lastWidgetUnderMouse = 0;
QApplicationPrivate::dispatchEnterLeave(lastWidgetUnderMouse, embeddedMouseGrabber);
embeddedMouseGrabber = 0;
#ifndef QT_NO_CURSOR
// ### Restore the cursor, don't override it.
if (!lastWidgetUnderMouse)
q->unsetCursor();
#endif
}
event->setAccepted(mouseEvent->isAccepted());
delete mouseEvent;
}
示例8: slotItemContextMenuRequested
void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos)
{
PlacesItem* item = m_model->placesItem(index);
if (!item) {
return;
}
QMenu menu(this);
QAction* emptyTrashAction = nullptr;
QAction* editAction = nullptr;
QAction* teardownAction = nullptr;
QAction* ejectAction = nullptr;
const QString label = item->text();
const bool isDevice = !item->udi().isEmpty();
const bool isTrash = (item->url().scheme() == QLatin1String("trash"));
if (isDevice) {
ejectAction = m_model->ejectAction(index);
if (ejectAction) {
ejectAction->setParent(&menu);
menu.addAction(ejectAction);
}
teardownAction = m_model->teardownAction(index);
if (teardownAction) {
teardownAction->setParent(&menu);
menu.addAction(teardownAction);
}
if (teardownAction || ejectAction) {
menu.addSeparator();
}
} else {
if (isTrash) {
emptyTrashAction = menu.addAction(QIcon::fromTheme(QStringLiteral("trash-empty")), i18nc("@action:inmenu", "Empty Trash"));
emptyTrashAction->setEnabled(item->icon() == QLatin1String("user-trash-full"));
menu.addSeparator();
}
}
QAction* openInNewWindowAction = menu.addAction(QIcon::fromTheme("window-new"), i18nc("@item:inmenu", "Open in New Window"));
QAction* openInNewTabAction = menu.addAction(QIcon::fromTheme("tab-new"), i18nc("@item:inmenu", "Open in New Tab"));
if (!isDevice && !isTrash) {
menu.addSeparator();
}
if (!isDevice) {
editAction = menu.addAction(QIcon::fromTheme("document-properties"), i18nc("@item:inmenu", "Edit..."));
}
QAction* removeAction = nullptr;
if (!isDevice && !item->isSystemItem()) {
removeAction = menu.addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), i18nc("@item:inmenu", "Remove"));
}
QAction* hideAction = menu.addAction(i18nc("@item:inmenu", "Hide"));
hideAction->setCheckable(true);
hideAction->setChecked(item->isHidden());
buildGroupContextMenu(&menu, index);
QAction* action = menu.exec(pos.toPoint());
if (action) {
if (action == emptyTrashAction) {
emptyTrash();
} else {
// The index might have changed if devices were added/removed while
// the context menu was open.
index = m_model->index(item);
if (index < 0) {
// The item is not in the model any more, probably because it was an
// external device that has been removed while the context menu was open.
return;
}
if (action == editAction) {
editEntry(index);
} else if (action == removeAction) {
m_model->deleteItem(index);
} else if (action == hideAction) {
item->setHidden(hideAction->isChecked());
} else if (action == openInNewWindowAction) {
Dolphin::openNewWindow({KFilePlacesModel::convertedUrl(m_model->data(index).value("url").toUrl())}, this);
} else if (action == openInNewTabAction) {
// TriggerItem does set up the storage first and then it will
// emit the slotItemMiddleClicked signal, because of Qt::MiddleButton.
triggerItem(index, Qt::MiddleButton);
} else if (action == teardownAction) {
m_model->requestTearDown(index);
} else if (action == ejectAction) {
m_model->requestEject(index);
}
}
}
selectClosestItem();
}
示例9: drawStroke
void BrushTool::drawStroke()
{
StrokeTool::drawStroke();
QList<QPointF> p = m_pStrokeManager->interpolateStroke();
Layer* layer = mEditor->layers()->currentLayer();
if ( layer->type() == Layer::BITMAP )
{
for ( int i = 0; i < p.size(); i++ )
{
p[ i ] = mEditor->view()->mapScreenToCanvas( p[ i ] );
}
qreal opacity = 1.0;
qreal brushWidth = mCurrentWidth + 0.5 * properties.feather;
qreal offset = qMax( 0.0, mCurrentWidth - 0.5 * properties.feather ) / brushWidth;
opacity = mCurrentPressure;
brushWidth = brushWidth * mCurrentPressure;
qreal brushStep = 0.5 * mCurrentWidth + 0.5 * properties.feather;
brushStep = brushStep * mCurrentPressure;
// if (usePressure) { brushStep = brushStep * tabletPressure; }
brushStep = qMax( 1.0, brushStep );
mCurrentWidth = properties.width;
BlitRect rect;
QRadialGradient radialGrad( QPointF( 0, 0 ), 0.5 * brushWidth );
mScribbleArea->setGaussianGradient( radialGrad,
mEditor->color()->frontColor(),
opacity,
offset );
QPointF a = lastBrushPoint;
QPointF b = getCurrentPoint();
// foreach (QSegment segment, calculateStroke(brushWidth))
// {
// QPointF a = lastBrushPoint;
// QPointF b = m_pScribbleArea->pixelToPoint(segment.second);
qreal distance = 4 * QLineF( b, a ).length();
int steps = qRound( distance ) / brushStep;
for ( int i = 0; i < steps; i++ )
{
QPointF point = lastBrushPoint + ( i + 1 ) * ( brushStep )* ( b - lastBrushPoint ) / distance;
rect.extend( point.toPoint() );
mScribbleArea->drawBrush( point,
brushWidth,
offset,
mEditor->color()->frontColor(),
opacity );
if ( i == ( steps - 1 ) )
{
lastBrushPoint = point;
}
}
int rad = qRound( brushWidth ) / 2 + 2;
mScribbleArea->refreshBitmap( rect, rad );
}
else if ( layer->type() == Layer::VECTOR )
{
qreal brushWidth = properties.width * mCurrentPressure;
int rad = qRound( ( brushWidth / 2 + 2 ) * mEditor->view()->scaling() );
QPen pen( mEditor->color()->frontColor(),
brushWidth * mEditor->view()->scaling(),
Qt::SolidLine,
Qt::RoundCap,
Qt::RoundJoin );
if ( p.size() == 4 )
{
QPainterPath path( p[ 0 ] );
path.cubicTo( p[ 1 ],
p[ 2 ],
p[ 3 ] );
mScribbleArea->drawPath( path, pen, Qt::NoBrush, QPainter::CompositionMode_Source );
mScribbleArea->refreshVector( path.boundingRect().toRect(), rad );
}
}
}
示例10: drawPieSurface
/**
Internal method that draws the surface of one of the pies in a pie chart.
\param painter the QPainter to draw in
\param dataset the dataset to draw the pie for
\param pie the pie to draw
*/
void PieDiagram::drawPieSurface( QPainter* painter,
DataValueTextInfoList* list,
uint dataset, uint pie,
qreal granularity )
{
// Is there anything to draw at all?
qreal angleLen = d->angleLens[ pie ];
if ( angleLen ) {
qreal startAngle = d->startAngles[ pie ];
QModelIndex index( model()->index( 0, pie, rootIndex() ) );
const PieAttributes attrs( pieAttributes( index ) );
const ThreeDPieAttributes threeDAttrs( threeDPieAttributes( index ) );
QRectF drawPosition = piePosition( dataset, pie );
painter->setRenderHint ( QPainter::Antialiasing );
QBrush br = brush( index );
if( threeDAttrs.isEnabled() ) {
br = threeDAttrs.threeDBrush( br, drawPosition );
}
painter->setBrush( br );
painter->setPen( pen( index ) );
if ( angleLen == 360 ) {
// full circle, avoid nasty line in the middle
painter->drawEllipse( drawPosition );
//Add polygon to Reverse mapper for showing tool tips.
QPolygonF poly( drawPosition );
d->reverseMapper.addPolygon( index.row(), index.column(), poly );
} else {
// draw the top of this piece
// Start with getting the points for the arc.
const int arcPoints = static_cast<int>(trunc( angleLen / granularity ));
QPolygonF poly( arcPoints+2 );
qreal degree=0.0;
int iPoint = 0;
bool perfectMatch = false;
while ( degree <= angleLen ){
poly[ iPoint ] = pointOnCircle( drawPosition, startAngle + degree );
//qDebug() << degree << angleLen << poly[ iPoint ];
perfectMatch = (degree == angleLen);
degree += granularity;
++iPoint;
}
// if necessary add one more point to fill the last small gap
if( ! perfectMatch ){
poly[ iPoint ] = pointOnCircle( drawPosition, startAngle + angleLen );
// add the center point of the piece
poly.append( drawPosition.center() );
}else{
poly[ iPoint ] = drawPosition.center();
}
//find the value and paint it
//fix value position
d->reverseMapper.addPolygon( index.row(), index.column(), poly );
painter->drawPolygon( poly );
}
// the new code is setting the needed position points according to the slice:
// all is calculated as if the slice were 'standing' on it's tip and the border
// were on top, so North is the middle of the curved outside line and South is the tip
//
const qreal sum = valueTotals();
const QPointF south = drawPosition.center();
const QPointF southEast = south;
const QPointF southWest = south;
const QPointF north = pointOnCircle( drawPosition, startAngle + angleLen/2.0 );
const QPointF northEast = pointOnCircle( drawPosition, startAngle );
const QPointF northWest = pointOnCircle( drawPosition, startAngle + angleLen );
QPointF center = (south + north) / 2.0;
const QPointF east = (south + northEast) / 2.0;
const QPointF west = (south + northWest) / 2.0;
CartesianDiagramDataCompressor::DataValueAttributesList allAttrs( d->aggregatedAttrs( this, index, 0 ) );
const QFontMetrics * fm = (d->cachedFontMetrics( allAttrs.value(index).textAttributes().calculatedFont(d->plane,KDChartEnums::MeasureOrientationMinimum ), this ));
if(!list->isEmpty())
{
QRect textRect = fm->boundingRect(QString::number(list->last().value));
textRect.translated(center.toPoint());
QPoint textRectCenter = textRect.center();
qreal newX = center.x() - textRectCenter.x();
qreal newY = center.y() - textRectCenter.y();
center.setX(newX);
center.setY(newY);
}
PositionPoints points( center, northWest, north, northEast, east, southEast, south, southWest, west);
//.........这里部分代码省略.........
示例11: mousePressEvent
bool ConnectionManager::mousePressEvent(QMouseEvent *event) {
if (event->button() == Qt::RightButton) {
if (m_fromPin != -1) {
m_fromPin = -1;
m_points.clear();
return true;
}
int point;
Connection *c = getPoint(NORM(event->x()), NORM(event->y()), point);
if (point != -1) {
// User can't remove first or last point like that
if (point == 0 || point == c->points.size() - 1) {
return false;
}
QList<QAction *> actions;
actions.append(new QAction("Remove point", 0));
QAction *action = QMenu::exec(actions, event->globalPos(), 0, 0);
if (action) {
removePoint(c, point);
}
return true;
}
c = getConnection(NORM(event->x()), NORM(event->y()), point);
if (c) {
QList<QAction *> actions;
actions.append(new QAction("Remove connection", 0));
QAction *action = QMenu::exec(actions, event->globalPos(), 0, 0);
if (action) {
removeConnection(c);
}
return true;
}
}
else if (event->button() == Qt::LeftButton) {
if (m_fromPin != -1) {
QPoint from = QPoint(m_movingX, m_movingY);
QPoint to(NORM(event->pos().x()), NORM(event->pos().y()));
ScreenObject *object = m_screen->getObject(NORM(event->x()), NORM(event->y()));
if (object) {
int pin = m_screen->getPin(object, NORM(event->x()), NORM(event->y()));
if (pin != -1) {
to = object->getPins()[pin].rect.center();
}
}
bool firstPoints = m_points.empty();
if (firstPoints) {
m_points.push_back(from);
}
if (m_screen->getObject(from.x(), to.y()) == m_fromObject/* &&
m_screen->getPin(m_moving, from.x(), to.y()) != -1*/) {
m_points.push_back(QPoint(to.x(), from.y()));
}
else {
m_points.push_back(QPoint(from.x(), to.y()));
}
// if (!firstPoints) {
m_points.push_back(to);
// }
int point;
Connection *c = getPoint(NORM(event->x()), NORM(event->y()), point);
if (point != -1) {
ScreenObject *object = m_screen->getObject(NORM(event->x()), NORM(event->y()));
if (object) {
m_points.erase(m_points.end() - 1);
m_points.erase(m_points.end() - 1);
return false;
}
addConnectionNode(c, point, event->x(), event->y(), m_points);
m_fromPin = -1;
m_points.clear();
// qDebug() << newPoints.size() << c->points.size() << "\n";
return true;
}
else {
QPointF intersectPnt;
int point;
c = getConnection(NORM(event->x()), NORM(event->y()), point, &intersectPnt);
if (c) {
QPoint p = intersectPnt.toPoint();
p = QPoint(NORM(p.x()), NORM(p.y()));
c->points.insert(c->points.begin() + point, p);
addConnectionNode(c, point, event->x(), event->y(), m_points);
m_fromPin = -1;
m_points.clear();
return true;
}
}
if (object) {
int pin = m_screen->getPin(object, NORM(event->x()), NORM(event->y()));
if (pin != -1) {
//.........这里部分代码省略.........
示例12: drawLabel
//.........这里部分代码省略.........
qreal curLen = startSegment + ((lenSegment - metrics.width(str)) / 2);
int modIncrement = 1;
qreal modAngle = 0;
int modY = 0;
if (cos(angToRad(tranformedRoadPath.angleAtPercent((startSegment+(lenSegment/2))/tranformedRoadPath.length()))) < 0) {
modIncrement = -1;
modAngle = 180.0;
curLen += metrics.width(str);
}
for (int i = 0; i < str.length(); ++i) {
qreal t = tranformedRoadPath.percentAtLength(curLen);
QPointF pt = tranformedRoadPath.pointAtPercent(t);
qreal angle = tranformedRoadPath.angleAtPercent(t);
modY = (metrics.ascent()/2)-3;
QMatrix m;
m.translate(pt.x(), pt.y());
m.rotate(-angle+modAngle);
QPainterPath charPath;
charPath.addText(0, modY, font, str.mid(i, 1));
charPath = charPath * m;
textPath.addPath(charPath);
qreal incremenet = metrics.width(str[i]);
curLen += (incremenet * modIncrement);
}
startSegment += lenSegment;
} while (--repeat >= 0);
if (getLabelHalo()) {
thePainter->setPen(QPen(Qt::white, font.pixelSize()/6));
thePainter->drawPath(textPath);
}
thePainter->setPen(Qt::NoPen);
thePainter->setBrush(LabelColor);
thePainter->drawPath(textPath);
thePainter->setClipRegion(rg);
}
}
if (DrawLabelBackground && !strBg.isEmpty()) {
QRegion rg = thePainter->clipRegion();
font.setPixelSize(int(WW));
QFontMetrics metrics(font);
int repeat = int((tranformedRoadPath.length() / (metrics.width(strBg) * LABEL_STRAIGHT_DISTANCE)) - 0.5);
int numSegment = repeat+1;
qreal lenSegment = tranformedRoadPath.length() / numSegment;
qreal startSegment = 0;
do {
int modX = 0;
int modY = 0;
qreal curLen = startSegment + (lenSegment / 2);
qreal t = tranformedRoadPath.percentAtLength(curLen);
QPointF pt = tranformedRoadPath.pointAtPercent(t);
modX = - (metrics.width(strBg)/2);
//modX = WW;
modY = (metrics.ascent()/2);
QPainterPath textPath, bgPath;
textPath.addText(modX, modY, font, strBg);
bgPath.addRect(textPath.boundingRect().adjusted(-BG_SPACING, -BG_SPACING, BG_SPACING, BG_SPACING));
bool rgContains = false;
for (int i=0; i<rg.rects().size(); i++) {
if (rg.rects()[i].contains(bgPath.boundingRect().toRect().translated(pt.toPoint()))) {
rgContains = true;
break;
}
}
if (rgContains) {
thePainter->translate(pt);
thePainter->setPen(QPen(LabelColor, BG_PEN_SZ));
thePainter->setBrush(LabelBackgroundColor);
thePainter->drawPath(bgPath);
if (getLabelHalo()) {
thePainter->setPen(QPen(Qt::white, font.pixelSize()/5));
thePainter->drawPath(textPath);
}
thePainter->setPen(Qt::NoPen);
thePainter->setBrush(LabelColor);
thePainter->drawPath(textPath);
rg -= bgPath.boundingRect().toRect().translated(pt.toPoint());
}
startSegment += lenSegment;
} while (--repeat >= 0);
thePainter->setClipRegion(rg);
}
thePainter->restore();
}
示例13: handleNodeElementsForRowsInserted
void EditorViewMViface::handleNodeElementsForRowsInserted(
const QList<QPair<NodeElement *, QPersistentModelIndex> > &nodes
, const QModelIndex &parent
)
{
for (const QPair<NodeElement *, QPersistentModelIndex> &p : nodes) {
NodeElement *elem = p.first;
QPersistentModelIndex current = p.second;
Id currentId = current.data(roles::idRole).value<Id>();
bool needToProcessChildren = true;
if (elem) {
QPointF ePos = model()->data(current, roles::positionRole).toPointF();
// setting position before parent definition 'itemChange' to work correctly
elem->setPos(ePos);
elem->setGeometry(mGraphicalAssistApi->configuration(elem->id()).boundingRect().translated(ePos.toPoint()));
handleAddingSequenceForRowsInserted(parent, elem, current);
handleElemDataForRowsInserted(elem, current);
if (currentId.element() == "Class" && mGraphicalAssistApi->children(currentId).empty())
{
needToProcessChildren = false;
for (int i = 0; i < 2; i++) {
QString curChildElementType = (i == 0) ? "MethodsContainer" : "FieldsContainer";
Id newUuid = Id("Kernel_metamodel", "Kernel", curChildElementType, QUuid::createUuid().toString());
mGraphicalAssistApi->createElement(currentId, newUuid
, false, "(anonymous something)", QPointF(0, 0));
}
}
}
if (needToProcessChildren && model()->hasChildren(current)) {
rowsInserted(current, 0, model()->rowCount(current) - 1);
}
if (elem) {
elem->alignToGrid();
}
}
}
示例14: resizeRubberBand
void GameView::resizeRubberBand(const QPointF &cursorPoint)
{
if (rubberBand)
rubberBand->setGeometry(QRect(mapFromScene(selectionOrigin), cursorPoint.toPoint()).normalized());
}
示例15: drawDots
/*!
Draw dots
\param painter Painter
\param xMap x map
\param yMap y map
\param from index of the first point to be painted
\param to index of the last point to be painted
\sa draw(), drawCurve(), drawSticks(), drawLines(), drawSteps()
*/
void QwtPlotCurve::drawDots(QPainter *painter,
const QwtScaleMap &xMap, const QwtScaleMap &yMap,
int from, int to) const
{
const QRect window = painter->window();
if ( window.isEmpty() )
return;
const bool doFill = d_data->brush.style() != Qt::NoBrush;
QwtPolygonF polyline;
if ( doFill )
polyline.resize(to - from + 1);
if ( to > from && d_data->paintAttributes & PaintFiltered )
{
if ( doFill )
{
QPointF pp( xMap.xTransform(x(from)), yMap.xTransform(y(from)) );
QwtPainter::drawPoint(painter, pp.x(), pp.y());
polyline[0] = pp;
int count = 1;
for (int i = from + 1; i <= to; i++)
{
const QPointF pi(xMap.xTransform(x(i)), yMap.xTransform(y(i)));
if ( pi != pp )
{
QwtPainter::drawPoint(painter, pi.x(), pi.y());
polyline[count] = pi;
count++;
pp = pi;
}
}
if ( int(polyline.size()) != count )
polyline.resize(count);
}
else
{
// if we don't need to fill, we can sort out
// duplicates independent from the order
PrivateData::PixelMatrix pixelMatrix(window);
for (int i = from; i <= to; i++)
{
const QPointF p( xMap.xTransform(x(i)), yMap.xTransform(y(i)) );
if ( pixelMatrix.testPixel(p.toPoint()) )
QwtPainter::drawPoint(painter, p.x(), p.y());
}
}
}
else
{
for (int i = from; i <= to; i++)
{
const double xi = xMap.xTransform(x(i));
const double yi = yMap.xTransform(y(i));
QwtPainter::drawPoint(painter, xi, yi);
if ( doFill )
polyline[i - from] = QPointF(xi, yi);
}
}
if ( doFill )
{
if ( d_data->paintAttributes & ClipPolygons )
polyline = QwtClipper::clipPolygonF(painter->window(), polyline);
fillCurve(painter, xMap, yMap, polyline);
}
}