本文整理汇总了C++中QRectF::toRect方法的典型用法代码示例。如果您正苦于以下问题:C++ QRectF::toRect方法的具体用法?C++ QRectF::toRect怎么用?C++ QRectF::toRect使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QRectF
的用法示例。
在下文中一共展示了QRectF::toRect方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: draw
//.........这里部分代码省略.........
if (fp != 0)
fputs("<g>\n", fp);
if (index == 0) {
// triangle only
int w = width() / 2 - 1;
int b = r.bottom();
int cx = (r.left() + r.right()) / 2;
p.drawLine(cx - w, b, cx + w, b);
//p.lineTo(cx, (int) y());
p.drawLine(cx + w, b, cx, (int) y());
//p.lineTo(cx - w, b);
p.drawLine(cx, (int)y(), cx - w, b);
if (fp != 0)
fprintf(fp, "\t<polygon fill=\"none\" stroke=\"black\" stroke-opacity=\"1\""
" points=\"%d,%d %d,%d %d,%d\" />\n",
cx - w, b, cx + w, b, cx, (int) y());
}
else if (index != -1) {
// label then triangle under
p.setFont(font());
p.drawText(rect(), ::Qt::AlignHCenter, text().mid(0, index - 1));
if (fp != 0)
draw_text(rect(), ::Qt::AlignHCenter, text().mid(0, index - 1),
p.font(), fp);
QFontMetrics fm(font());
int w = fm.width(Triangle) / 2 - 1;
int cx = (r.left() + r.right()) / 2;
int cy = (int) y() + fm.height();
int b = r.bottom();
p.drawLine(cx - w, b, cx + w, b);
//p.lineTo(cx, cy);
p.drawLine(cx + w, b, cx, cy);
//p.lineTo(cx - w, b);
p.drawLine(cx, cy, cx - w, b);
if (fp != 0)
fprintf(fp, "\t<polygon fill=\"none\" stroke=\"black\" stroke-opacity=\"1\""
" points=\"%d,%d %d,%d %d,%d\" />\n",
cx - w, b, cx + w, b, cx, cy);
}
else if (text() != Zigzag) {
// no triangle nor zigzag
if (text().indexOf('\n') != -1) {
p.setFont(font());
int flg = (multi_lines_centered) ? ::Qt::AlignHCenter : 0;
p.drawText(rect(), flg, text().mid(0, index - 1));
if (fp != 0)
draw_text(rect(), flg, text().mid(0, index - 1),
p.font(), fp);
}
else {
QStyleOptionGraphicsItem option;
QGraphicsSimpleTextItem::paint(&p,&option,0);
if (fp != 0)
draw_text(rect(), 0, text(), p.font(), fp);
}
}
else {
// zigzag (only used as stereotype)
int t = r.top() + 2;
int h = height() - 2;
int yb = r.bottom() - h / 4;
int xr = r.right() - r.width() / 4;
p.drawLine(r.left(), t, r.right(), t);
//p.lineTo(r.left(), yb);
p.drawLine(r.right(), t, r.left(), yb);
//p.lineTo(r.right(), yb);
p.drawLine(r.left(), yb, r.right(), yb);
//p.lineTo(xr, r.bottom() - h / 2);
p.drawLine(r.right(), yb, xr, r.bottom() - h / 2);
p.drawLine(r.right(), yb, xr, r.bottom());
if (fp != 0) {
fprintf(fp, "\t<polyline fill=\"none\" stroke=\"black\" stroke-opacity=\"1\""
" points=\"%f,%d %f,%d %f,%d %f,%d %d,%f\" />\n",
r.left(), t, r.right(), t, r.left(), yb, r.right(), yb, xr, r.bottom() - h / 2);
fprintf(fp, "\t<line stroke=\"black\" stroke-opacity=\"1\""
" x1=\"%f\" y1=\"%d\" x2=\"%d\" y2=\"%f\" />\n",
r.right(), yb, xr, r.bottom());
}
}
if (fp != 0)
fputs("</g>\n", fp);
if (isSelected())
show_mark(p, r.toRect());
}
示例2: setRect
void ScreenSetupDragWidget::setRect(QRectF const& _rect)
{
setGeometry(_rect.toRect());
raise();
}
示例3: eventFilter
bool ScreenGraphicsItem::eventFilter( QObject *object, QEvent *e )
{
MarbleWidget *widget = dynamic_cast<MarbleWidget*>(object);
if ( !widget ) {
return MarbleGraphicsItem::eventFilter( object, e );
}
if ( !p()->m_floatItemMoving ) {
if ( MarbleGraphicsItem::eventFilter( object, e ) ) {
return true;
}
if ( !visible() || !p()->isMovable() ) {
return false;
}
if ( e->type() == QEvent::MouseMove ) {
return false;
}
// Move ScreenGraphicsItem
if ( e->type() == QEvent::MouseButtonPress )
{
QMouseEvent *event = static_cast<QMouseEvent*>(e);
// Click and move above a float item triggers moving the float item
if ( contains( event->pos() ) ) {
if ( event->button() == Qt::LeftButton ) {
p()->m_floatItemMoveStartPos = event->pos();
p()->m_floatItemMoving = true;
return true;
}
}
}
return false;
}
else {
// Move ScreenGraphicsItem
bool cursorAboveFloatItem = false;
if ( e->type() == QEvent::MouseMove
|| e->type() == QEvent::MouseButtonPress
|| e->type() == QEvent::MouseButtonRelease )
{
QMouseEvent *event = static_cast<QMouseEvent*>( e );
// The rect the item was painted on before. We add one pixel as antialiasing could
// result into painting on these pixels to.
QRectF floatItemRect = QRectF( positivePosition() - QPoint( 1, 1 ),
size() + QSize( 2, 2 ) );
// Click and move above a float item triggers moving the float item
if ( contains( event->pos() ) ) {
cursorAboveFloatItem = true;
if ( e->type() == QEvent::MouseButtonPress && event->button() == Qt::LeftButton ) {
p()->m_floatItemMoveStartPos = event->pos();
return true;
}
}
if ( e->type() == QEvent::MouseMove && event->buttons() & Qt::LeftButton && p()->isMovable() )
{
p()->m_floatItemMoving = true;
const QPoint &point = event->pos();
QPointF position = positivePosition();
qreal newX = position.x()+point.x()-p()->m_floatItemMoveStartPos.x();
qreal newY = position.y()+point.y()-p()->m_floatItemMoveStartPos.y();
if ( newX >= 0 && newY >= 0 ) {
// docking behavior
const qreal dockArea = 60.0; // Alignment area width/height
const qreal dockJump = 30.0; // Alignment indicator jump size
if ( widget->width()-size().width()-newX < dockArea ) {
newX = qMin( qreal( -1.0 ), size().width() + newX-widget->width() );
if ( p()->m_floatItemMoveStartPos.x() < event->pos().x() ) {
// Indicate change to right alignment with a short jump
newX = qMax( newX, -(dockArea-dockJump) );
}
}
if ( widget->height()-size().height()-newY < dockArea ) {
newY = qMin( qreal( -1.0 ), size().height() + newY-widget->height() );
if (p()->m_floatItemMoveStartPos.y()<event->pos().y()) {
// Indicate change to bottom alignment with a short jump
newY = qMax( newY, -( dockArea - dockJump ) );
}
}
setPosition( QPointF( newX,newY ) );
// The rect the item will be painted on now. We add one pixel as
// antialiasing could result into painting on these pixels to.
QRect newFloatItemRect = QRectF( positivePosition() - QPoint( 1, 1 ),
size() + QSize( 2, 2 ) ).toRect();
p()->m_floatItemMoveStartPos = event->pos();
QRegion dirtyRegion( floatItemRect.toRect() );
dirtyRegion = dirtyRegion.united( newFloatItemRect );
widget->setAttribute( Qt::WA_NoSystemBackground, false );
widget->update(dirtyRegion);
widget->setAttribute( Qt::WA_NoSystemBackground, widget->viewport()->mapCoversViewport() );
return true;
}
//.........这里部分代码省略.........
示例4: drawLines
/*!
Draw lines
\param painter Painter
\param azimuthMap Maps azimuth values to values related to 0.0, M_2PI
\param radialMap Maps radius values into painter coordinates.
\param pole Position of the pole in painter coordinates
\param from index of the first point to be painted
\param to index of the last point to be painted.
\sa draw(), drawLines(), setCurveFitter()
*/
void QwtPolarCurve::drawLines( QPainter *painter,
const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
const QPointF &pole, int from, int to ) const
{
int size = to - from + 1;
if ( size <= 0 )
return;
QPolygonF polyline;
if ( d_data->curveFitter )
{
QPolygonF points( size );
for ( int j = from; j <= to; j++ )
{
const QwtPointPolar point = sample( j );
points[j - from] = QPointF( point.azimuth(), point.radius() );
}
points = d_data->curveFitter->fitCurve( points );
polyline.resize( points.size() );
QPointF *polylineData = polyline.data();
QPointF *pointsData = points.data();
for ( int i = 0; i < points.size(); i++ )
{
const QwtPointPolar point( pointsData[i].x(), pointsData[i].y() );
double r = radialMap.transform( point.radius() );
const double a = azimuthMap.transform( point.azimuth() );
polylineData[i] = qwtPolar2Pos( pole, r, a );
}
}
else
{
polyline.resize( size );
QPointF *polylineData = polyline.data();
for ( int i = from; i <= to; i++ )
{
QwtPointPolar point = sample( i );
if ( !qwtInsidePole( radialMap, point.radius() ) )
{
double r = radialMap.transform( point.radius() );
const double a = azimuthMap.transform( point.azimuth() );
polylineData[i - from] = qwtPolar2Pos( pole, r, a );
}
else
{
polylineData[i - from] = pole;
}
}
}
QRectF clipRect;
if ( painter->hasClipping() )
clipRect = painter->clipRegion().boundingRect();
else
{
clipRect = painter->window();
if ( !clipRect.isEmpty() )
clipRect = painter->transform().inverted().mapRect( clipRect );
}
if ( !clipRect.isEmpty() )
{
double off = qCeil( qMax( 1.0, painter->pen().widthF() ) );
clipRect = clipRect.toRect().adjusted( -off, -off, off, off );
polyline = QwtClipper::clipPolygonF( clipRect, polyline );
}
QwtPainter::drawPolyline( painter, polyline );
painter->drawPolyline( polyline );
}
示例5: if
QList<KWViewMode::ViewMap> KWViewModeNormal::mapExposedRects(const QRectF &viewRect, KoViewConverter *viewConverter) const
{
QList<ViewMap> answer;
if (!viewConverter) return answer;
#if 1
if (m_pageTops.isEmpty())
return answer;
KWPage page = m_pageManager->begin();
const int pageOffset = page.pageNumber();
// Perform a binary search for page-index using our m_pageTops cache.
int begin = 0;
int end = m_pageTops.count() - 1;
int index = 0;
const qreal value = viewConverter->viewToDocument(viewRect.topLeft()).y();
if (m_pageTops.value(end) <= value) { // check extremes. Only end is needed since begin is zero.
begin = end;
index = end;
}
while (end - begin > 1) {
index = begin + (end - begin) / 2;
qreal diff = m_pageTops.value(index) - value;
if (diff < 0)
begin = index;
else if (diff > 0)
end = index;
else
break;
}
// index is now the number of the first possible page that can
// contain the viewRect. The next step is to find the
// corresponding Page. Since we have no way to get to the Nth
// page directly we have to enumerate them from the beginning.
//
// We use 1 since we might hit a pagespread in the binary search,
// so start one page early.
while (index > 1) {
page = page.next();
--index;
}
// From here we loop through some more pages after the found one
// and see if they intersect with the page in question. When we
// have two pages in row that don't intersect we break the loop.
qreal offsetX = 0.0;
int emptyPages = 0;
for(; page.isValid(); page = page.next()) {
Q_ASSERT_X(page.pageNumber()-pageOffset < m_pageTops.count(), __FUNCTION__,
QString("Pagemanager has more pages than viewmode (%1>%2 with pageOffset=%3 and pageNumber=%4 and pageCount=%5). Make sure you add pages via the document!")
.arg(page.pageNumber()-pageOffset).arg(m_pageTops.count())
.arg(pageOffset).arg(page.pageNumber()).arg(m_pageManager->pageCount()).toLocal8Bit());
// Some invariants
const QRectF pageRect = page.rect();
const qreal offsetY = m_pageTops[page.pageNumber() - pageOffset] - pageRect.top();
bool pageIntersects = false;
// 1. First handle the page itself.
const QRectF zoomedPage = viewConverter->documentToView(pageRect);
ViewMap vm;
vm.page = page;
//kDebug(32003) <<"page" << page.pageNumber();
vm.distance = viewConverter->documentToView(QPointF(offsetX, offsetY));
const QRectF targetPage(zoomedPage.x() + vm.distance.x(), zoomedPage.y() + vm.distance.y(),
zoomedPage.width(), zoomedPage.height());
QRectF intersection = targetPage.intersect(viewRect);
if (! intersection.isEmpty()) {
intersection.moveTopLeft(intersection.topLeft() - vm.distance);
vm.clipRect = intersection.toRect();
answer.append(vm);
pageIntersects = true;
}
// 2. Then handle the annotation area if annotations are active.
//
// The reason we don't do them together with the page
// itself is because the pages have a gap between them, but
// the annotation area should be unbroken.
//
// NOTE: 'annotation' below means the annotation area.
//
// FIXME: We should only do this if the annotation area is
// actually shown. How can we inside the KWViewMode
// know if annotations are active?
if (1 /* annotations are shown */) {
const QRectF annotationRect = pageRect.adjusted(page.width(), 0,
KWCanvasBase::AnnotationAreaWidth, GAP);
const QRectF zoomedAnnotation = viewConverter->documentToView(annotationRect);
ViewMap vm2;
vm2.page = page;
vm2.distance = viewConverter->documentToView(QPointF(offsetX, offsetY));
const QRectF targetAnnotation(zoomedAnnotation.x() + vm2.distance.x(),
zoomedAnnotation.y() + vm2.distance.y(),
zoomedAnnotation.width(), zoomedAnnotation.height());
intersection = targetAnnotation.intersect(viewRect);
//.........这里部分代码省略.........
示例6: renderDocument
/*!
Render a plot to a file
Supported formats are:
- pdf\n
- ps\n
- svg\n
- all image formats supported by Qt, see QImageWriter::supportedImageFormats()
\param plot Plot widget
\param fileName Path of the file, where the document will be stored
\param format Format for the document
\param sizeMM Size for the document in millimeters.
\param resolution Resolution in dots per Inch (dpi)
\sa renderTo(), render(), QwtPainter::setRoundingAlignment()
*/
void QwtPolarRenderer::renderDocument( QwtPolarPlot *plot,
const QString &fileName, const QString &format,
const QSizeF &sizeMM, int resolution )
{
if ( plot == NULL || sizeMM.isEmpty() || resolution <= 0 )
return;
QString title = plot->title().text();
if ( title.isEmpty() )
title = "Plot Document";
const double mmToInch = 1.0 / 25.4;
const QSizeF size = sizeMM * mmToInch * resolution;
const QRectF documentRect( 0.0, 0.0, size.width(), size.height() );
const QString fmt = format.toLower();
if ( format == "pdf" || format == "ps" )
{
QPrinter printer;
printer.setFullPage( true );
printer.setPaperSize( sizeMM, QPrinter::Millimeter );
printer.setDocName( title );
printer.setOutputFileName( fileName );
printer.setOutputFormat( ( format == "pdf" )
? QPrinter::PdfFormat : QPrinter::PostScriptFormat );
printer.setResolution( resolution );
QPainter painter( &printer );
render( plot, &painter, documentRect );
}
#ifndef QWT_NO_POLAR_SVG
#ifdef QT_SVG_LIB
#if QT_VERSION >= 0x040500
else if ( format == "svg" )
{
QSvgGenerator generator;
generator.setTitle( title );
generator.setFileName( fileName );
generator.setResolution( resolution );
generator.setViewBox( documentRect );
QPainter painter( &generator );
render( plot, &painter, documentRect );
}
#endif
#endif
#endif
else
{
if ( QImageWriter::supportedImageFormats().indexOf(
format.toLatin1() ) >= 0 )
{
const QRect imageRect = documentRect.toRect();
const int dotsPerMeter = qRound( resolution * mmToInch * 1000.0 );
QImage image( imageRect.size(), QImage::Format_ARGB32 );
image.setDotsPerMeterX( dotsPerMeter );
image.setDotsPerMeterY( dotsPerMeter );
image.fill( QColor( Qt::white ).rgb() );
QPainter painter( &image );
render( plot, &painter, imageRect );
painter.end();
image.save( fileName, format.toLatin1() );
}
}
}
示例7: qwtExpandImage
static QImage qwtExpandImage(const QImage &image,
const QwtScaleMap &xMap, const QwtScaleMap &yMap,
const QRectF &area, const QRectF &area2, const QRectF &paintRect,
const QwtInterval &xInterval, const QwtInterval &yInterval )
{
const QRectF strippedRect = qwtStripRect(paintRect, area2,
xMap, yMap, xInterval, yInterval);
const QSize sz = strippedRect.toRect().size();
const int w = image.width();
const int h = image.height();
const QRectF r = QwtScaleMap::transform(xMap, yMap, area).normalized();
const double pw = ( r.width() - 1) / w;
const double ph = ( r.height() - 1) / h;
double px0, py0;
if ( !xMap.isInverting() )
{
px0 = xMap.transform( area2.left() );
px0 = qRound( px0 );
px0 = px0 - xMap.transform( area.left() );
}
else
{
px0 = xMap.transform( area2.right() );
px0 = qRound( px0 );
px0 -= xMap.transform( area.right() );
px0 -= 1.0;
}
px0 += strippedRect.left() - paintRect.left();
if ( !yMap.isInverting() )
{
py0 = yMap.transform( area2.top() );
py0 = qRound( py0 );
py0 -= yMap.transform( area.top() );
}
else
{
py0 = yMap.transform( area2.bottom() );
py0 = qRound( py0 );
py0 -= yMap.transform( area.bottom() );
py0 -= 1.0;
}
py0 += strippedRect.top() - paintRect.top();
QImage expanded(sz, image.format());
switch( image.depth() )
{
case 32:
{
for ( int y1 = 0; y1 < h; y1++ )
{
int yy1;
if ( y1 == 0 )
{
yy1 = 0;
}
else
{
yy1 = qRound( y1 * ph - py0 );
if ( yy1 < 0 )
yy1 = 0;
}
int yy2;
if ( y1 == h - 1 )
{
yy2 = sz.height();
}
else
{
yy2 = qRound( ( y1 + 1 ) * ph - py0 );
if ( yy2 > sz.height() )
yy2 = sz.height();
}
const quint32 *line1 =
reinterpret_cast<const quint32 *>( image.scanLine( y1 ) );
for ( int x1 = 0; x1 < w; x1++ )
{
int xx1;
if ( x1 == 0 )
{
xx1 = 0;
}
else
{
xx1 = qRound( x1 * pw - px0 );
if ( xx1 < 0 )
xx1 = 0;
}
int xx2;
if ( x1 == w - 1 )
//.........这里部分代码省略.........
示例8: draw
/*!
Draw the shape item
\param painter Painter
\param xMap X-Scale Map
\param yMap Y-Scale Map
\param canvasRect Contents rect of the plot canvas
*/
void QwtPlotShapeItem::draw( QPainter *painter,
const QwtScaleMap &xMap, const QwtScaleMap &yMap,
const QRectF &canvasRect ) const
{
if ( d_data->shape.isEmpty() )
return;
if ( d_data->pen.style() == Qt::NoPen
&& d_data->brush.style() == Qt::NoBrush )
{
return;
}
const QRectF cr = QwtScaleMap::invTransform(
xMap, yMap, canvasRect.toRect() );
const QRectF &br = d_data->boundingRect;
if ( ( br.left() > cr.right() ) || ( br.right() < cr.left() )
|| ( br.top() > cr.bottom() ) || ( br.bottom() < cr.top() ) )
{
// outside the visisble area
return;
}
const bool doAlign = QwtPainter::roundingAlignment( painter );
QPainterPath path = qwtTransformPath( xMap, yMap,
d_data->shape, doAlign );
if ( testPaintAttribute( QwtPlotShapeItem::ClipPolygons ) )
{
const qreal pw = QwtPainter::effectivePenWidth( painter->pen() );
const QRectF clipRect = canvasRect.adjusted( -pw, -pw, pw, pw );
QPainterPath clippedPath;
clippedPath.setFillRule( path.fillRule() );
QList<QPolygonF> polygons = path.toSubpathPolygons();
for ( int i = 0; i < polygons.size(); i++ )
{
QwtClipper::clipPolygonF( clipRect, polygons[i], true );
clippedPath.addPolygon( polygons[i] );
}
path = clippedPath;
}
if ( d_data->renderTolerance > 0.0 )
{
QwtWeedingCurveFitter fitter( d_data->renderTolerance );
QPainterPath fittedPath;
fittedPath.setFillRule( path.fillRule() );
const QList<QPolygonF> polygons = path.toSubpathPolygons();
for ( int i = 0; i < polygons.size(); i++ )
fittedPath.addPolygon( fitter.fitCurve( polygons[ i ] ) );
path = fittedPath;
}
painter->setPen( d_data->pen );
painter->setBrush( d_data->brush );
painter->drawPath( path );
}
示例9: testSafeTransform
void KisTransformMaskTest::testSafeTransform()
{
QTransform transform(-0.177454, -0.805953, -0.00213713,
-1.9295, -0.371835, -0.00290463,
3075.05, 2252.32, 7.62371);
QRectF testRect(0, 1024, 512, 512);
KisSafeTransform t2(transform, QRect(0, 0, 2048, 2048), testRect.toRect());
QPolygonF fwdPoly = t2.mapForward(testRect);
QRectF fwdRect = t2.mapRectForward(testRect);
QPolygonF bwdPoly = t2.mapBackward(fwdPoly);
QRectF bwdRect = t2.mapRectBackward(fwdRect);
QPolygon ref;
ref.clear();
ref << QPoint(284, 410);
ref << QPoint(10, 613);
ref << QPoint(35, 532);
ref << QPoint(236, 403);
ref << QPoint(284, 410);
QCOMPARE(fwdPoly.toPolygon(), ref);
QCOMPARE(fwdRect.toRect(), QRect(10,403,274,211));
ref.clear();
ref << QPoint(512, 1024);
ref << QPoint(512, 1536);
ref << QPoint(0, 1536);
ref << QPoint(0, 1024);
ref << QPoint(512, 1024);
QCOMPARE(bwdPoly.toPolygon(), ref);
QCOMPARE(bwdRect.toRect(), QRect(0, 994, 1198, 584));
/*
QImage image(2500, 2500, QImage::Format_ARGB32);
QPainter gc(&image);
gc.setPen(Qt::cyan);
gc.setOpacity(0.7);
gc.setBrush(Qt::red);
gc.drawPolygon(t2.srcClipPolygon());
gc.setBrush(Qt::green);
gc.drawPolygon(t2.dstClipPolygon());
dbgKrita << ppVar(testRect);
dbgKrita << ppVar(fwdPoly);
dbgKrita << ppVar(fwdRect);
dbgKrita << ppVar(bwdPoly);
dbgKrita << ppVar(bwdRect);
gc.setBrush(Qt::yellow);
gc.drawPolygon(testRect);
gc.setBrush(Qt::red);
gc.drawPolygon(fwdRect);
gc.setBrush(Qt::blue);
gc.drawPolygon(fwdPoly);
gc.setBrush(Qt::magenta);
gc.drawPolygon(bwdRect);
gc.setBrush(Qt::cyan);
gc.drawPolygon(bwdPoly);
gc.end();
image.save("polygons_safety.png");
*/
}
示例10: if
QList<KWViewMode::ViewMap> KWViewModeNormal::clipRectToDocument(const QRect &viewRect) const
{
QList<ViewMap> answer;
if (m_pageTops.isEmpty())
return answer;
KWPage page = m_pageManager->begin();
qreal offsetX = 0.0;
const int pageOffset = page.pageNumber();
int begin = 0;
int end = m_pageTops.count() - 1;
int index = 0;
const qreal value = m_viewConverter->viewToDocument(viewRect.topLeft()).y();
if (m_pageTops.value(end) <= value) { // check extremes. Only end is needed since begin is zero.
begin = end;
index = end;
}
while (end - begin > 1) { // binary search for page-index using our m_pageTops cache.
index = begin + (end - begin) / 2;
qreal diff = m_pageTops.value(index) - value;
if (diff < 0)
begin = index;
else if (diff > 0)
end = index;
else
break;
}
while (index > 1) { // 1 since we might hit a pagespread in the binary search, so start one page early
page = page.next();
--index;
if (page.pageSide() == KWPage::PageSpread)
--index;
}
int emptyPages = 0;
while (page.isValid()) {
#ifndef NDEBUG
if (page.pageNumber() - pageOffset >= m_pageTops.count()) {
kWarning(32003) << "ERROR; pagemanager has more pages than viewmode ("
<< m_pageManager->pageCount() << ">" << m_pageTops.count()
<< "). Make sure you add pages via the document!";
break;
}
#endif
const QRectF pageRect = page.rect();
const QRectF zoomedPage = m_viewConverter->documentToView(pageRect);
ViewMap vm;
vm.page = page;
//kDebug(32003) <<"page" << page.pageNumber();
const qreal offsetY = m_pageTops[page.pageNumber() - pageOffset] - pageRect.top();
vm.distance = m_viewConverter->documentToView(QPointF(offsetX, offsetY));
const QRectF targetPage(zoomedPage.x() + vm.distance.x(), zoomedPage.y() + vm.distance.y(),
zoomedPage.width() , zoomedPage.height());
QRectF intersection = targetPage.intersect(viewRect);
if (! intersection.isEmpty()) {
intersection.moveTopLeft(intersection.topLeft() - vm.distance);
vm.clipRect = intersection.toRect();
answer.append(vm);
emptyPages = 0;
} else {
emptyPages++;
}
if (emptyPages > 2) // Since we show at max 2 pages side by side this is an easy rule
break;
if (m_pageSpreadMode) {
if (page.pageSide() == KWPage::Left)
offsetX = page.width() + GAP;
else
offsetX = 0.0;
}
page = page.next();
}
return answer;
}
示例11: visualRect
//-----------------------------------------------------------------------------
QRect vktraceviewer_QTimelineView::visualRect(const QModelIndex &index) const
{
QRectF rectf = viewportRect(index);
return rectf.toRect();
}
示例12: draw
/*!
Draw the grid and axes
\param painter Painter
\param azimuthMap Maps azimuth values to values related to 0.0, M_2PI
\param radialMap Maps radius values into painter coordinates.
\param pole Position of the pole in painter coordinates
\param radius Radius of the complete plot area in painter coordinates
\param canvasRect Contents rect of the canvas in painter coordinates
*/
void QwtPolarGrid::draw( QPainter *painter,
const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
const QPointF &pole, double radius,
const QRectF &canvasRect ) const
{
updateScaleDraws( azimuthMap, radialMap, pole, radius );
painter->save();
if ( testDisplayFlag( ClipAxisBackground ) )
{
QRegion clipRegion( canvasRect.toRect() );
for ( int axisId = 0; axisId < QwtPolar::AxesCount; axisId++ )
{
const AxisData &axis = d_data->axisData[axisId];
if ( axisId != QwtPolar::AxisAzimuth && axis.isVisible )
{
QwtScaleDraw *scaleDraw = static_cast<QwtScaleDraw *>( axis.scaleDraw );
if ( scaleDraw->hasComponent( QwtScaleDraw::Labels ) )
{
const QList<double> &ticks =
scaleDraw->scaleDiv().ticks( QwtScaleDiv::MajorTick );
for ( int i = 0; i < int( ticks.size() ); i++ )
{
if ( !scaleDraw->scaleDiv().contains( ticks[i] ) )
continue;
QRect labelRect =
scaleDraw->boundingLabelRect( axis.font, ticks[i] );
const int margin = 2;
labelRect.adjust( -margin, -margin, margin, margin );
if ( labelRect.isValid() )
clipRegion -= QRegion( labelRect );
}
}
}
}
painter->setClipRegion( clipRegion );
}
// draw radial grid
const GridData &radialGrid = d_data->gridData[QwtPolar::Radius];
if ( radialGrid.isVisible && radialGrid.isMinorVisible )
{
painter->setPen( radialGrid.minorPen );
drawCircles( painter, canvasRect, pole, radialMap,
radialGrid.scaleDiv.ticks( QwtScaleDiv::MinorTick ) );
drawCircles( painter, canvasRect, pole, radialMap,
radialGrid.scaleDiv.ticks( QwtScaleDiv::MediumTick ) );
}
if ( radialGrid.isVisible )
{
painter->setPen( radialGrid.majorPen );
drawCircles( painter, canvasRect, pole, radialMap,
radialGrid.scaleDiv.ticks( QwtScaleDiv::MajorTick ) );
}
// draw azimuth grid
const GridData &azimuthGrid =
d_data->gridData[QwtPolar::Azimuth];
if ( azimuthGrid.isVisible && azimuthGrid.isMinorVisible )
{
painter->setPen( azimuthGrid.minorPen );
drawRays( painter, canvasRect, pole, radius, azimuthMap,
azimuthGrid.scaleDiv.ticks( QwtScaleDiv::MinorTick ) );
drawRays( painter, canvasRect, pole, radius, azimuthMap,
azimuthGrid.scaleDiv.ticks( QwtScaleDiv::MediumTick ) );
}
if ( azimuthGrid.isVisible )
{
painter->setPen( azimuthGrid.majorPen );
drawRays( painter, canvasRect, pole, radius, azimuthMap,
azimuthGrid.scaleDiv.ticks( QwtScaleDiv::MajorTick ) );
}
painter->restore();
for ( int axisId = 0; axisId < QwtPolar::AxesCount; axisId++ )
{
const AxisData &axis = d_data->axisData[axisId];
if ( axis.isVisible )
{
//.........这里部分代码省略.........
示例13: renderPage
void ORPrintRender::renderPage(ORODocument * pDocument, int pageNb, QPainter *painter, qreal xDpi, qreal yDpi, QSize margins, int printResolution)
{
OROPage * p = pDocument->page(pageNb);
if(((!p->backgroundImage().isNull()) && (p->backgroundOpacity() != 0)) ||
((!p->watermarkText().isEmpty()) && (p->watermarkOpacity() != 0)))
{
// Do some simple processing used by both Background and Watermark
const int resolution = 100;
bool doBgWm = false;
int printMarginWidth = margins.width();
int printMarginHeight = margins.height();
QString pageSize = pDocument->pageOptions().getPageSize();
int pageWidth = 0;
int pageHeight = 0;
if(pageSize == "Custom") {
// if this is custom sized sheet of paper we will just use those values
pageWidth = (int)(pDocument->pageOptions().getCustomWidth() * resolution);
pageHeight = (int)(pDocument->pageOptions().getCustomHeight() * resolution);
} else {
// lookup the correct size information for the specified size paper
PageSizeInfo pi = PageSizeInfo::getByName(pageSize);
if(!pi.isNull())
{
pageWidth = (int)((pi.width() / 100.0) * resolution);
pageHeight = (int)((pi.height() / 100.0) * resolution);
}
}
if(!pDocument->pageOptions().isPortrait()) {
int tmp = pageWidth;
pageWidth = pageHeight;
pageHeight = tmp;
}
if(pageWidth < 1 || pageHeight < 1) {
// whoops we couldn't find it.... we will use the values from the painter
// and add in the margins of the printer to get what should be the correct
// size of the sheet of paper we are printing to.
pageWidth = (int)(((painter->viewport().width() + printMarginWidth + printMarginWidth) / xDpi) * resolution);
pageHeight = (int)(((painter->viewport().height() + printMarginHeight + printMarginHeight) / yDpi) * resolution);
}
QImage image = QImage(pageWidth, pageHeight, QImage::Format_RGB32);
QPainter gPainter;
if(gPainter.begin(&image))
gPainter.fillRect(gPainter.viewport(), QColor(Qt::white));
// Render Background
if((!p->backgroundImage().isNull()) && (p->backgroundOpacity() != 0))
{
doBgWm = true;
QPointF ps = p->backgroundPosition();
QSizeF sz = p->backgroundSize();
QRectF rc = QRectF(ps.x() * resolution, ps.y() * resolution, sz.width() * resolution, sz.height() * resolution);
renderBackground(image, p->backgroundImage(), rc.toRect(),
p->backgroundScale(), p->backgroundScaleMode(),
p->backgroundAlign(), p->backgroundOpacity());
}
// Render Watermark
if((!p->watermarkText().isEmpty()) && (p->watermarkOpacity() != 0))
{
doBgWm = true;
renderWatermark(image, p->watermarkText(), p->watermarkFont(), p->watermarkOpacity(),
((pDocument->pageOptions().getMarginLeft() + pDocument->pageOptions().getMarginRight()) * resolution),
((pDocument->pageOptions().getMarginTop() + pDocument->pageOptions().getMarginBottom()) * resolution),
pDocument->pageOptions().getMarginLeft() * resolution, pDocument->pageOptions().getMarginTop() * resolution);
}
if(doBgWm)
{
QRectF target(-printMarginWidth, -printMarginHeight, (painter->viewport().width() + printMarginWidth + printMarginWidth), (painter->viewport().height() + printMarginHeight + printMarginHeight));
QRectF source(0, 0, image.width(), image.height());
painter->drawImage(target, image, source);
}
}
// Render Page Objects
for(int i = 0; i < p->primitives(); i++)
{
OROPrimitive * prim = p->primitive(i);
QPen pen(prim->pen());
painter->save();
painter->setPen(pen);
painter->setBrush(prim->brush());
QPointF ps = prim->position();
if(prim->rotationAxis().isNull()) {
painter->translate(ps.x() * xDpi, ps.y() * yDpi);
painter->rotate(prim->rotation()); // rotation around the origin of the primitive (not the center)
}
else { // rotation around the defined axis
qreal xRot = prim->rotationAxis().x();
qreal yRot = prim->rotationAxis().y();
painter->translate(xRot * xDpi, yRot * yDpi);
painter->rotate(prim->rotation());
painter->translate((ps.x() - xRot) * xDpi, (ps.y() - yRot) * yDpi);
}
//.........这里部分代码省略.........
示例14: paintCell
//.........这里部分代码省略.........
cellBackgroundColor = palette().color(backgroundRole());
cellTextColor = palette().color(foregroundRole());
// If we are drawing the current date, then draw it bold and active
if (currentDay)
{
cellFont.setBold(true);
cellTextColor = palette().color(QPalette::LinkVisited);
}
// if we are drawing the day cell currently selected in the table
if (selectedDay)
{
// set the background to highlighted
cellBackgroundColor = palette().color(QPalette::Highlight);
cellTextColor = palette().color(QPalette::HighlightedText);
}
//If custom colors or shape are required for this date
if (customDay)
{
Private::DatePaintingMode mode = d->customPaintingModes[cellDate.toJulianDay()];
if (mode.bgMode != NoBgMode)
{
if (!selectedDay)
{
cellBackgroundColor = mode.bgColor;
}
}
cellTextColor = mode.fgColor;
}
//If the cell day is the day of religious observance, then always color text red unless Custom overrides
if (! customDay && dayOfPray)
{
cellTextColor = Qt::darkRed;
}
}
}
//Draw the background
if (row == 0)
{
painter->setPen(cellBackgroundColor);
painter->setBrush(cellBackgroundColor);
painter->drawRect(cell);
}
else if (cellBackgroundColor != palette().color(backgroundRole()) || pos == d->hoveredPos)
{
QStyleOptionViewItem opt;
opt.initFrom(this);
opt.rect = cell.toRect();
if (cellBackgroundColor != palette().color(backgroundRole()))
{
opt.palette.setBrush(QPalette::Highlight, cellBackgroundColor);
opt.state |= QStyle::State_Selected;
}
if (pos == d->hoveredPos && opt.state & QStyle::State_Enabled)
{
opt.state |= QStyle::State_MouseOver;
}
else
{
opt.state &= ~QStyle::State_MouseOver;
}
opt.showDecorationSelected = true;
opt.viewItemPosition = QStyleOptionViewItem::OnlyOne;
style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, this);
}
//Draw the text
painter->setPen(cellTextColor);
painter->setFont(cellFont);
painter->drawText(cell, Qt::AlignCenter, cellText, &cell);
//Draw the base line
if (row == 0)
{
painter->setPen(palette().color(foregroundRole()));
painter->drawLine(QPointF(0, h), QPointF(w, h));
}
// If the day cell we just drew is bigger than the current max cell sizes,
// then adjust the max to the current cell
if (cell.width() > d->maxCell.width())
{
d->maxCell.setWidth(cell.width());
}
if (cell.height() > d->maxCell.height())
{
d->maxCell.setHeight(cell.height());
}
}
示例15: drawHalo
void drawHalo(QPainter *painter, const QRectF &rect)
{
HaloPainter::instance()->drawHalo(painter, rect.toRect());
}