本文整理汇总了C++中QRectF::left方法的典型用法代码示例。如果您正苦于以下问题:C++ QRectF::left方法的具体用法?C++ QRectF::left怎么用?C++ QRectF::left使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QRectF
的用法示例。
在下文中一共展示了QRectF::left方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: draw
void GridItem::draw( QPainter *painter,
const QwtScaleMap &xMap, const QwtScaleMap &yMap,
const QRectF &canvasRect ) const
{
const bool doAlign = QwtPainter::roundingAlignment( painter );
const QRectF area = QwtScaleMap::invTransform( xMap, yMap, canvasRect );
QList<double> xValues;
if ( m_orientations & Qt::Horizontal )
{
xValues = m_xScaleDiv.ticks( QwtScaleDiv::MajorTick );
if ( m_isXMinEnabled )
{
xValues += m_xScaleDiv.ticks( QwtScaleDiv::MediumTick );
xValues += m_xScaleDiv.ticks( QwtScaleDiv::MinorTick );
}
if ( m_gridAttributes & FillCanvas )
{
xValues += area.left();
xValues += area.right();
}
qSort( xValues );
}
QList<double> yValues;
if ( m_orientations & Qt::Vertical )
{
yValues = m_yScaleDiv.ticks( QwtScaleDiv::MajorTick );
if ( m_isYMinEnabled )
{
yValues += m_yScaleDiv.ticks( QwtScaleDiv::MediumTick );
yValues += m_yScaleDiv.ticks( QwtScaleDiv::MinorTick );
}
if ( m_gridAttributes & FillCanvas )
{
yValues += area.top();
yValues += area.bottom();
}
qSort( yValues );
}
painter->setPen( Qt::NoPen );
if ( ( m_orientations & Qt::Horizontal ) &&
( m_orientations & Qt::Vertical ) )
{
for ( int i = 1; i < xValues.size(); i++ )
{
double x1 = xMap.transform( xValues[i - 1] );
double x2 = xMap.transform( xValues[i] );
if ( doAlign )
{
x1 = qRound( x1 );
x2 = qRound( x2 );
}
for ( int j = 1; j < yValues.size(); j++ )
{
const QRectF rect( xValues[i - 1], yValues[j - 1],
xValues[i] - xValues[i - 1], yValues[j] - yValues[j - 1] );
painter->setBrush( brush( i - 1, j - 1, rect ) );
double y1 = yMap.transform( yValues[j - 1] );
double y2 = yMap.transform( yValues[j] );
if ( doAlign )
{
y1 = qRound( y1 );
y2 = qRound( y2 );
}
QwtPainter::drawRect( painter, x1, y1, x2 - x1, y2 - y1 );
}
}
}
else if ( m_orientations & Qt::Horizontal )
{
for ( int i = 1; i < xValues.size(); i++ )
{
const QRectF rect( xValues[i - 1], area.top(),
xValues[i] - xValues[i - 1], area.bottom() );
painter->setBrush( brush( i - 1, 0, rect ) );
double x1 = xMap.transform( xValues[i - 1] );
double x2 = xMap.transform( xValues[i] );
if ( doAlign )
{
x1 = qRound( x1 );
x2 = qRound( x2 );
//.........这里部分代码省略.........
示例2: draw
void QEglFSCursor::draw(const QRectF &r)
{
if (!m_program) {
// one time initialization
createShaderPrograms();
if (!m_cursorAtlas.texture) {
createCursorTexture(&m_cursorAtlas.texture, m_cursorAtlas.image);
m_cursorAtlas.image = QImage();
if (m_cursor.shape != Qt::BitmapCursor)
m_cursor.texture = m_cursorAtlas.texture;
}
}
if (m_cursor.shape == Qt::BitmapCursor && !m_cursor.customCursorImage.isNull()) {
// upload the custom cursor
createCursorTexture(&m_cursor.customCursorTexture, m_cursor.customCursorImage);
m_cursor.texture = m_cursor.customCursorTexture;
m_cursor.customCursorImage = QImage();
}
Q_ASSERT(m_cursor.texture);
glUseProgram(m_program);
const GLfloat x1 = r.left();
const GLfloat x2 = r.right();
const GLfloat y1 = r.top();
const GLfloat y2 = r.bottom();
const GLfloat cursorCoordinates[] = {
x1, y2,
x2, y2,
x1, y1,
x2, y1
};
const GLfloat s1 = m_cursor.textureRect.left();
const GLfloat s2 = m_cursor.textureRect.right();
const GLfloat t1 = m_cursor.textureRect.top();
const GLfloat t2 = m_cursor.textureRect.bottom();
const GLfloat textureCoordinates[] = {
s1, t2,
s2, t2,
s1, t1,
s2, t1
};
glBindTexture(GL_TEXTURE_2D, m_cursor.texture);
glEnableVertexAttribArray(m_vertexCoordEntry);
glEnableVertexAttribArray(m_textureCoordEntry);
glVertexAttribPointer(m_vertexCoordEntry, 2, GL_FLOAT, GL_FALSE, 0, cursorCoordinates);
glVertexAttribPointer(m_textureCoordEntry, 2, GL_FLOAT, GL_FALSE, 0, textureCoordinates);
glUniform1f(m_textureEntry, 0);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST); // disable depth testing to make sure cursor is always on top
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisable(GL_BLEND);
glBindTexture(GL_TEXTURE_2D, 0);
glDisableVertexAttribArray(m_vertexCoordEntry);
glDisableVertexAttribArray(m_textureCoordEntry);
glUseProgram(0);
}
示例3: parseDoc
bool OsmImport::parseDoc(QDomDocument &doc)
{
QDomNodeList list = doc.elementsByTagName("node");
for (int i = 0; i < list.count(); i++)
{
nodes.append(new osmNode(list.at(i).toElement()));
}
list = doc.elementsByTagName("way");
for (int i = 0; i < list.count(); i++)
{
ways.append(new osmWay(list.at(i).toElement(), nodes));
}
bool doPrimary = ImportSettings::instance()->importPrimary();
bool doSecondary = ImportSettings::instance()->importSecondary();
bool doTertiary = ImportSettings::instance()->importTertiary();
bool doMotorway = ImportSettings::instance()->importMotorway();
bool doService = ImportSettings::instance()->importService();
bool doPath = ImportSettings::instance()->importPath();
bool doSteps = ImportSettings::instance()->importSteps();
bool doTrack = ImportSettings::instance()->importTrack();
bool doFootpath = ImportSettings::instance()->importFootway();
bool doResidential = ImportSettings::instance()->importResidential();
bool doLiving_street = ImportSettings::instance()->importLiving_street();
bool doCycleway = ImportSettings::instance()->importCycleway();
bool doTurning_circle = ImportSettings::instance()->importTurning_circle();
bool doPedestrian = ImportSettings::instance()->importPedestrian();
bool doUnclassified = ImportSettings::instance()->importUnclassified();
for (int i = 0; i < ways.count(); i++)
{
osmWay *w = ways.at(i);
osmWay::wayType t = w->type;
if ((t == osmWay::primary && doPrimary) ||
(t == osmWay::secondary && doSecondary) ||
(t == osmWay::tertiary && doTertiary) ||
(t == osmWay::motorway && doMotorway) ||
(t == osmWay::service && doService) ||
(t == osmWay::path && doPath) ||
(t == osmWay::steps && doSteps) ||
(t == osmWay::track && doTrack) ||
(t == osmWay::footway && doFootpath) ||
(t == osmWay::residential && doResidential) ||
(t == osmWay::living_street && doLiving_street) ||
(t == osmWay::cycleway && doCycleway) ||
(t == osmWay::turning_circle && doTurning_circle) ||
(t == osmWay::pedestrian && doPedestrian) ||
(t == osmWay::unclassified && doUnclassified))
{
project->XVector = w->XVector;
project->YVector = w->YVector;
project->ZVector = w->ZVector;
if (project->XVector.size() > 0)
{
project->addLineStrip(w->name,w->maxSpeed,w->bridge,w->numLanes,w->type);
}
}
}
qDeleteAll(ways.begin(), ways.end());
qDeleteAll(nodes.begin(), nodes.end());
ways.clear();
nodes.clear();
// resize
BoundingBoxVisitor *visitor = new BoundingBoxVisitor();
project->getProjectData()->getRoadSystem()->accept(visitor);
project->getProjectData()->getScenerySystem()->accept(visitor);
QRectF box = visitor->getBoundingBox();
SetProjectDimensionsCommand *command = new SetProjectDimensionsCommand(project->getProjectData(), box.bottom() + 0.1 * box.height(), box.top() - 0.1 * box.height(), box.right() + 0.1 * box.width(), box.left() - 0.1 * box.width());
project->getProjectSettings()->executeCommand(command);
return true;
}
示例4: draw
void CMapRaster::draw()
{
if(!dataset) return;
pixBuffer.fill(Qt::white);
QPainter _p_(&pixBuffer);
QRectF viewport(x, y, size.width() * zoomfactor, size.height() * zoomfactor);
QRectF intersect = viewport.intersected(maparea);
// x/y offset [pixel] into file matrix
qint32 xoff = intersect.left();
qint32 yoff = intersect.top();
// number of x/y pixel to read
qint32 pxx = intersect.width();
qint32 pxy = intersect.height();
// the final image width and height in pixel
qint32 w = (qint32)(pxx / zoomfactor) & 0xFFFFFFFC;
qint32 h = (qint32)(pxy / zoomfactor);
if((w*h) == 0)
{
return;
}
CPLErr err = CE_Failure;
if(rasterBandCount == 1)
{
GDALRasterBand * pBand;
pBand = dataset->GetRasterBand(1);
QImage img(QSize(w,h),QImage::Format_Indexed8);
img.setColorTable(colortable);
err = pBand->RasterIO(GF_Read,(int)xoff,(int)yoff,pxx,pxy,img.bits(),w,h,GDT_Byte,0,0);
if(!err)
{
double xx = (intersect.left() - x) / zoomfactor, yy = (intersect.top() - y) / zoomfactor;
_p_.drawPixmap(xx,yy,QPixmap::fromImage(img));
}
}
else
{
QImage img(w,h, QImage::Format_ARGB32);
QVector<quint8> buffer(w*h);
img.fill(qRgba(255,255,255,255));
QRgb testPix = qRgba(GCI_RedBand, GCI_GreenBand, GCI_BlueBand, GCI_AlphaBand);
for(int b = 1; b <= rasterBandCount; ++b)
{
GDALRasterBand * pBand;
pBand = dataset->GetRasterBand(b);
err = pBand->RasterIO(GF_Read, (int)xoff, (int)yoff, pxx, pxy, buffer.data(), w, h, GDT_Byte, 0, 0);
if(!err)
{
int pbandColour = pBand->GetColorInterpretation();
unsigned int offset;
for (offset = 0; offset < sizeof(testPix) && *(((quint8 *)&testPix) + offset) != pbandColour; offset++);
if(offset < sizeof(testPix))
{
quint8 * pTar = img.bits() + offset;
quint8 * pSrc = buffer.data();
const int size = buffer.size();
for(int i = 0; i < size; ++i)
{
*pTar = *pSrc;
pTar += sizeof(testPix);
pSrc += 1;
}
}
}
}
if(!err)
{
double xx = (intersect.left() - x) / zoomfactor, yy = (intersect.top() - y) / zoomfactor;
_p_.drawPixmap(xx,yy,QPixmap::fromImage(img));
}
}
}
示例5: userChangedBox
void MosaicAreaTool::userChangedBox() {
bool latValid = false;
bool lonValid = false;
bool areaValid = false;
if(!m_latLineEdit || !m_lonLineEdit || !m_areaLineEdit) {
clearBox();
return;
}
QString latitude = m_latLineEdit->text();
if(latitude != "Null" && latitude != "") {
int cursorPos = 0;
QValidator::State validLat =
m_latLineEdit->validator()->validate(latitude, cursorPos);
if(validLat != QValidator::Acceptable) {
QMessageBox::warning(getWidget(), "Error",
"Latitude value must be in the range -90 to 90",
QMessageBox::Ok, QMessageBox::NoButton,
QMessageBox::NoButton);
}
else {
latValid = true;
}
}
//Validate longitude value
QString longitude = m_lonLineEdit->text();
if(longitude != "Null" && longitude != "" && latValid) {
int cursorPos = 0;
QValidator::State validLon =
m_lonLineEdit->validator()->validate(longitude, cursorPos);
if(validLon != QValidator::Acceptable) {
QMessageBox::warning(getWidget(), "Error",
"Longitude value invalid",
QMessageBox::Ok, QMessageBox::NoButton,
QMessageBox::NoButton);
}
else {
lonValid = true;
}
}
QString areaString = m_areaLineEdit->text();
if(areaString != "Null" && areaString != "" && latValid && lonValid) {
int cursorPos = 0;
QValidator::State validArea =
m_areaLineEdit->validator()->validate(areaString, cursorPos);
if(validArea != QValidator::Acceptable) {
QMessageBox::warning(getWidget(), "Error",
"Area value invalid",
QMessageBox::Ok, QMessageBox::NoButton,
QMessageBox::NoButton);
}
else {
areaValid = true;
}
}
if(latValid && lonValid && areaValid) {
double lat = IString(latitude.toStdString()).ToDouble();
double lon = IString(longitude.toStdString()).ToDouble();
double area = IString(areaString.toStdString()).ToDouble();
Projection *projection = getWidget()->getProjection();
Projection::ProjectionType ptype = projection->projectionType();
if (projection && ptype == Projection::Triaxial) {
TProjection * tproj = (TProjection *) projection;
if (tproj->SetGround(lat, lon)) {
QPointF scenePos(projection->XCoord(), -1 * projection->YCoord());
QRectF sceneRect(getWidget()->getView()->sceneRect());
if(sceneRect.contains(scenePos)) {
if(m_box != NULL) {
clearBox();
}
Distance distance(area, Distance::Meters);
QPolygonF boxPoly;
QRectF latLonRange = calcLatLonRange(QPointF(lon, lat), distance);
double xStep = latLonRange.width() / 100.0;
double yStep = latLonRange.height() / 100.0;
bool hasPole = (latLonRange.top() == -90 ||
latLonRange.bottom() == 90);
double yPos = latLonRange.top();
if (yPos != -90) {
for(double xPos = latLonRange.left();
xPos <= latLonRange.right();
xPos += xStep) {
if (tproj->SetGround(yPos, xPos)) {
QPointF pos(tproj->XCoord(), -1 * tproj->YCoord());
boxPoly << pos;
}
//.........这里部分代码省略.........
示例6: drawCoordinates
void SingleCellViewGraphPanelPlotWidget::drawCoordinates(QPainter *pPainter,
const QPointF &pCoordinates,
const QColor &pBackgroundColor,
const QColor &pForegroundColor,
const Location &pLocation,
const bool &pCanMoveLocation)
{
// Retrieve the size of coordinates as they will appear on the screen,
// which means using the same font as the one used for the axes
pPainter->setFont(axisFont(QwtPlot::xBottom));
QString coords = QString("(%1, %2)").arg(QString::number(pCoordinates.x()),
QString::number(pCoordinates.y()));
QRect desktopGeometry = qApp->desktop()->availableGeometry();
QRectF coordsRect = pPainter->boundingRect(QRectF(0.0, 0.0, desktopGeometry.width(), desktopGeometry.height()), coords);
// Determine where the coordinates and its background should be drawn
QPoint coordinates = QPoint(canvasMap(QwtPlot::xBottom).transform(pCoordinates.x()),
canvasMap(QwtPlot::yLeft).transform(pCoordinates.y()));
switch (pLocation) {
case TopLeft:
coordsRect.moveTo(coordinates.x()-coordsRect.right()-1,
coordinates.y()-coordsRect.bottom()-1);
break;
case TopRight:
coordsRect.moveTo(coordinates.x()+2,
coordinates.y()-coordsRect.bottom()-1);
break;
case BottomLeft:
coordsRect.moveTo(coordinates.x()-coordsRect.right()-1,
coordinates.y()+2);
break;
case BottomRight:
coordsRect.moveTo(coordinates.x()+2,
coordinates.y()+2);
break;
}
if (pCanMoveLocation) {
if (coordsRect.top() < 0)
coordsRect.moveTop(coordinates.y()+2);
if (coordsRect.left() < 0)
coordsRect.moveLeft(coordinates.x()+2);
if (coordsRect.bottom() > plotLayout()->canvasRect().height())
coordsRect.moveTop(coordinates.y()-coordsRect.height()-1);
if (coordsRect.right() > plotLayout()->canvasRect().width())
coordsRect.moveLeft(coordinates.x()-coordsRect.width()-1);
}
// Draw a filled rectangle to act as the background of the coordinates
// we are to show
pPainter->fillRect(coordsRect, pBackgroundColor);
// Draw the text for the coordinates, using a white pen
QPen pen = pPainter->pen();
pen.setColor(pForegroundColor);
pPainter->setPen(pen);
pPainter->drawText(coordsRect, coords);
}
示例7: printToPage
void MainWindow::printToPage(QPainter *p, QRectF sp)
{
QRectF pos = sp;
QRectF pos2;
pos.setLeft(pos.left() + adjust->value("x", 0).toInt() - 40 );
pos.setTop( pos.top() + adjust->value("y", 0).toInt() + 300 );
if(ui->beg->text().length() > 27)
{
p->drawText(pos, ui->beg->text());
}else{
pos2 = pos;
for(int i = 0; i < ui->beg->text().length(); i++) {
pos2.setLeft(pos.left() + i * 118);
p->drawText(pos2, ui->beg->text().at(i));
}
}
pos.setTop( pos.top() + 210 );
pos2 = pos;
for(int i = 0; i < ui->begIBAN->text().remove(" ").length(); i++) {
pos2.setLeft(pos.left() + i * 93);
p->drawText(pos2, ui->begIBAN->text().remove(" ").at(i));
}
pos.setTop( pos.top() + 210 );
pos2 = pos;
for(int i = 0; i < ui->begBIC->text().length(); i++) {
pos2.setLeft(pos.left() + i * 118);
p->drawText(pos2, ui->begBIC->text().at(i));
}
pos.setTop( pos.top() + 185);
pos2 = pos;
pos2.setLeft( pos2.left() + 1770 );
for(int i = 0; i < ui->betrag->text().length(); i++) {
p->drawText(pos2, ui->betrag->text().at(i));
pos2.setLeft(pos2.left() + 118);
}
pos.setTop( pos.top() + 210);
pos2 = pos;
for(int i = 0; i < ui->verwendungszweck->text().length(); i++) {
pos2.setLeft(pos.left() + i * 118);
p->drawText(pos2, ui->verwendungszweck->text().at(i));
}
pos.setTop( pos.top() + 200);
pos2 = pos;
if(ui->nochVerwendungszweck->text().length() > 27)
{
p->drawText(pos, ui->nochVerwendungszweck->text());
}else{
for(int i = 0; i < ui->nochVerwendungszweck->text().length(); i++) {
pos2.setLeft(pos.left() + i * 118);
p->drawText(pos2, ui->nochVerwendungszweck->text().at(i));
}
}
pos.setTop( pos.top() + 200);
pos2 = pos;
for(int i = 0; i < ui->inhaber->text().length(); i++) {
pos2.setLeft(pos.left() + i * 118);
p->drawText(pos2, ui->inhaber->text().at(i));
}
pos.setTop( pos.top() + 200);
pos2 = pos;
for(int i = 0; i < ui->inhaberIBAN->text().remove(" ").length(); i++) {
pos2.setLeft(pos.left() + i * 118);
if(i > 1) p->drawText(pos2, ui->inhaberIBAN->text().remove(" ").at(i));
}
pos.setTop( pos.top() + 350);
QDate currDate = QDateTime::currentDateTime().date();
p->drawText(pos, QString( currDate.day() < 10 ? "0" : "" ) + QString::number(currDate.day()) + QString(".") + QString(currDate.month() < 10 ? "0" : "" ) + QString::number(currDate.month()) + QString(".") + QString::number(currDate.year()));
}
示例8: clipSegmentToRect
static void clipSegmentToRect(qreal x0, qreal y0, qreal x1, qreal y1,
const QRectF &clipRect,
QVector<qreal> &outPoints,
QVector<QPainterPath::ElementType> &outTypes)
{
int type0 = clipPointType(x0, y0, clipRect);
int type1 = clipPointType(x1, y1, clipRect);
bool accept = false;
while (true) {
if (!(type0 | type1)) {
accept = true;
break;
} else if (type0 & type1) {
break;
} else {
qreal x = 0.0;
qreal y = 0.0;
int outsideType = type0 ? type0 : type1;
if (outsideType & BottomPoint) {
x = x0 + (x1 - x0) * (clipRect.bottom() - y0) / (y1 - y0);
y = clipRect.bottom() - 0.1;
} else if (outsideType & TopPoint) {
x = x0 + (x1 - x0) * (clipRect.top() - y0) / (y1 - y0);
y = clipRect.top() + 0.1;
} else if (outsideType & RightPoint) {
y = y0 + (y1 - y0) * (clipRect.right() - x0) / (x1 - x0);
x = clipRect.right() - 0.1;
} else if (outsideType & LeftPoint) {
y = y0 + (y1 - y0) * (clipRect.left() - x0) / (x1 - x0);
x = clipRect.left() + 0.1;
}
if (outsideType == type0) {
x0 = x;
y0 = y;
type0 = clipPointType(x0, y0, clipRect);
} else {
x1 = x;
y1 = y;
type1 = clipPointType(x1, y1, clipRect);
}
}
}
if (accept) {
if (outPoints.size() >= 2) {
qreal lastX, lastY;
lastY = outPoints.at(outPoints.size() - 1);
lastX = outPoints.at(outPoints.size() - 2);
if (!qFuzzyCompare(lastY, y0) || !qFuzzyCompare(lastX, x0)) {
outTypes << QPainterPath::MoveToElement;
outPoints << x0 << y0;
}
} else {
outTypes << QPainterPath::MoveToElement;
outPoints << x0 << y0;
}
outTypes << QPainterPath::LineToElement;
outPoints << x1 << y1;
}
}
示例9: paint
void GlslPainter::paint(QPainter *painter,
QRectF target,
QQuickWindow *window)
{
// Need to reenable those after native painting has begun, otherwise we might
// not be able to paint anything.
bool stencilTestEnabled = glIsEnabled(GL_STENCIL_TEST);
bool scissorTestEnabled = glIsEnabled(GL_SCISSOR_TEST);
painter->beginNativePainting();
if (stencilTestEnabled)
glEnable(GL_STENCIL_TEST);
if (scissorTestEnabled)
glEnable(GL_SCISSOR_TEST);
//////////////////////////////////////////////////////////////
initTextures();
//////////////////////////////////////////////////////////////
// As seen on the telly
#ifdef __GNUC__
#warning DUPLICATED CODE
#endif
const float textureCoordinates[] = {
0, 1, // bottom left
1, 1, // bottom right
0, 0, // top left
1, 0, // top right
};
const GLfloat targetVertex[] =
{
GLfloat(target.left()), GLfloat(target.bottom()),
GLfloat(target.right()), GLfloat(target.bottom()),
GLfloat(target.left()) , GLfloat(target.top()),
GLfloat(target.right()), GLfloat(target.top())
};
//
const int width = window->width();
const int height = window->height();
const QTransform transform = painter->deviceTransform();
const GLfloat wfactor = 2.0 / width;
const GLfloat hfactor = -2.0 / height;
const GLfloat positionMatrix[4][4] = {
{
GLfloat(wfactor * transform.m11() - transform.m13()),
GLfloat(hfactor * transform.m12() + transform.m13()),
0.0,
GLfloat(transform.m13())
}, {
GLfloat(wfactor * transform.m21() - transform.m23()),
GLfloat(hfactor * transform.m22() + transform.m23()),
0.0,
GLfloat(transform.m23())
}, {
0.0,
0.0,
-1.0,
0.0
}, {
GLfloat(wfactor * transform.dx() - transform.m33()),
GLfloat(hfactor * transform.dy() + transform.m33()),
0.0,
GLfloat(transform.m33())
}
};
_program->bind();
_program->enableAttributeArray("targetVertex");
_program->enableAttributeArray("textureCoordinates");
_program->setAttributeArray("targetVertex", targetVertex, 2);
_program->setAttributeArray("textureCoordinates", textureCoordinates, 2);
_program->setUniformValue("positionMatrix", positionMatrix);
if (_textureCount == 3) {
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _textureIds[0]);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, _textureIds[1]);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, _textureIds[2]);
glActiveTexture(GL_TEXTURE0);
_program->setUniformValue("texY", 0);
_program->setUniformValue("texU", 1);
_program->setUniformValue("texV", 2);
}
_program->setUniformValue("colorMatrix", _colorMatrix);
_program->setUniformValue("opacity", GLfloat(painter->opacity()));
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
_program->release();
//.........这里部分代码省略.........
示例10: qwtCombinePathList
static QPainterPath qwtCombinePathList( const QRectF &rect,
const QList<QPainterPath> &pathList )
{
if ( pathList.isEmpty() )
return QPainterPath();
QPainterPath ordered[8]; // starting top left
for ( int i = 0; i < pathList.size(); i++ )
{
int index = -1;
QPainterPath subPath = pathList[i];
const QRectF br = pathList[i].controlPointRect();
if ( br.center().x() < rect.center().x() )
{
if ( br.center().y() < rect.center().y() )
{
if ( qAbs( br.top() - rect.top() ) <
qAbs( br.left() - rect.left() ) )
{
index = 1;
}
else
{
index = 0;
}
}
else
{
if ( qAbs( br.bottom() - rect.bottom() ) <
qAbs( br.left() - rect.left() ) )
{
index = 6;
}
else
{
index = 7;
}
}
if ( subPath.currentPosition().y() > br.center().y() )
qwtRevertPath( subPath );
}
else
{
if ( br.center().y() < rect.center().y() )
{
if ( qAbs( br.top() - rect.top() ) <
qAbs( br.right() - rect.right() ) )
{
index = 2;
}
else
{
index = 3;
}
}
else
{
if ( qAbs( br.bottom() - rect.bottom() ) <
qAbs( br.right() - rect.right() ) )
{
index = 5;
}
else
{
index = 4;
}
}
if ( subPath.currentPosition().y() < br.center().y() )
qwtRevertPath( subPath );
}
ordered[index] = subPath;
}
for ( int i = 0; i < 4; i++ )
{
if ( ordered[ 2 * i].isEmpty() != ordered[2 * i + 1].isEmpty() )
{
// we don't accept incomplete rounded borders
return QPainterPath();
}
}
const QPolygonF corners( rect );
QPainterPath path;
//path.moveTo( rect.topLeft() );
for ( int i = 0; i < 4; i++ )
{
if ( ordered[2 * i].isEmpty() )
{
path.lineTo( corners[i] );
}
else
{
path.connectPath( ordered[2 * i] );
//.........这里部分代码省略.........
示例11: drawLegendIdentifier
/*!
\brief Draw the identifier representing the curve on the legend
\param painter Qt Painter
\param rect Bounding rectangle for the identifier
\sa setLegendAttribute
*/
void QwtPolarCurve::drawLegendIdentifier(
QPainter *painter, const QRectF &rect ) const
{
if ( rect.isEmpty() )
return;
const double dim = qMin( rect.width(), rect.height() );
QSizeF size( dim, dim );
QRectF r( 0, 0, size.width(), size.height() );
r.moveCenter( rect.center() );
if ( d_data->legendAttributes == 0 )
{
QBrush brush;
if ( style() != QwtPolarCurve::NoCurve )
brush = QBrush( pen().color() );
else if ( d_data->symbol &&
( d_data->symbol->style() != QwtSymbol::NoSymbol ) )
{
brush = QBrush( d_data->symbol->pen().color() );
}
if ( brush.style() != Qt::NoBrush )
painter->fillRect( r, brush );
}
if ( d_data->legendAttributes & QwtPolarCurve::LegendShowLine )
{
if ( pen() != Qt::NoPen )
{
painter->setPen( pen() );
QwtPainter::drawLine( painter, rect.left(), rect.center().y(),
rect.right() - 1.0, rect.center().y() );
}
}
if ( d_data->legendAttributes & QwtPolarCurve::LegendShowSymbol )
{
if ( d_data->symbol &&
( d_data->symbol->style() != QwtSymbol::NoSymbol ) )
{
QSize symbolSize = d_data->symbol->boundingSize();
symbolSize -= QSize( 2, 2 );
// scale the symbol size down if it doesn't fit into rect.
double xRatio = 1.0;
if ( rect.width() < symbolSize.width() )
xRatio = rect.width() / symbolSize.width();
double yRatio = 1.0;
if ( rect.height() < symbolSize.height() )
yRatio = rect.height() / symbolSize.height();
const double ratio = qMin( xRatio, yRatio );
painter->save();
painter->scale( ratio, ratio );
d_data->symbol->drawSymbol( painter, rect.center() / ratio );
painter->restore();
}
}
}
示例12: draw
/*!
\brief Draw the scale
*/
void QwtPlotScaleItem::draw( QPainter *painter,
const QwtScaleMap &xMap, const QwtScaleMap &yMap,
const QRectF &canvasRect ) const
{
QwtScaleDraw *sd = d_data->scaleDraw;
if ( d_data->scaleDivFromAxis )
{
const QwtInterval interval =
d_data->scaleInterval( canvasRect, xMap, yMap );
if ( interval != sd->scaleDiv().interval() )
{
QwtScaleDiv scaleDiv = sd->scaleDiv();
scaleDiv.setInterval( interval );
sd->setScaleDiv( scaleDiv );
}
}
QPen pen = painter->pen();
pen.setStyle( Qt::SolidLine );
painter->setPen( pen );
if ( sd->orientation() == Qt::Horizontal )
{
double y;
if ( d_data->borderDistance >= 0 )
{
if ( sd->alignment() == QwtScaleDraw::BottomScale )
y = canvasRect.top() + d_data->borderDistance;
else
{
y = canvasRect.bottom() - d_data->borderDistance;
}
}
else
{
y = yMap.transform( d_data->position );
}
if ( y < canvasRect.top() || y > canvasRect.bottom() )
return;
sd->move( canvasRect.left(), y );
sd->setLength( canvasRect.width() - 1 );
QwtTransform *transform = NULL;
if ( xMap.transformation() )
transform = xMap.transformation()->copy();
sd->setTransformation( transform );
}
else // == Qt::Vertical
{
double x;
if ( d_data->borderDistance >= 0 )
{
if ( sd->alignment() == QwtScaleDraw::RightScale )
x = canvasRect.left() + d_data->borderDistance;
else
{
x = canvasRect.right() - d_data->borderDistance;
}
}
else
{
x = xMap.transform( d_data->position );
}
if ( x < canvasRect.left() || x > canvasRect.right() )
return;
sd->move( x, canvasRect.top() );
sd->setLength( canvasRect.height() - 1 );
QwtTransform *transform = NULL;
if ( yMap.transformation() )
transform = yMap.transformation()->copy();
sd->setTransformation( transform );
}
painter->setFont( d_data->font );
sd->draw( painter, d_data->palette );
}
示例13: GRect
GRect GAppHelper::QRectF2GRect(const QRectF &other)
{
return GRect(other.left(), other.top(),
other.right(), other.bottom());
}
示例14: 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 )
//.........这里部分代码省略.........
示例15: drawCanvas
void SingleCellViewGraphPanelPlotWidget::drawCanvas(QPainter *pPainter)
{
foreach (SingleCellViewGraphPanelPlotCurve *curve, mCurves)
static_cast<SingleCellViewQwtCurveDataAdaptor*>(curve->data())->updateSize();
switch (mAction) {
case ShowCoordinates: {
// We are showing some coordinates, so start by drawing our pixmap
pPainter->drawPixmap(0, 0, mCanvasPixmap);
// Draw the two dashed lines that show the coordinates, using a dark
// cyan pen
QPen pen = pPainter->pen();
QColor backgroundColor = Qt::darkCyan;
backgroundColor.setAlphaF(0.69);
pen.setColor(backgroundColor);
pen.setStyle(Qt::DashLine);
pPainter->setPen(pen);
QPointF coordinates = QPointF(canvasMap(QwtPlot::xBottom).transform(mOriginPoint.x()),
canvasMap(QwtPlot::yLeft).transform(mOriginPoint.y()));
pPainter->drawLine(0.0, coordinates.y(),
plotLayout()->canvasRect().width(), coordinates.y());
pPainter->drawLine(coordinates.x(), 0.0,
coordinates.x(), plotLayout()->canvasRect().height());
// Draw the coordinates
drawCoordinates(pPainter, mOriginPoint, backgroundColor, Qt::white);
break;
}
case ZoomRegion: {
// We are zooming a region, so start by drawing our pixmap
pPainter->drawPixmap(0, 0, mCanvasPixmap);
// Retrieve the coordinates of the region to be zoomed
QRectF zoomRegionRect = zoomRegion();
// Now, draw the region to be zoomed
QColor penColor = Qt::darkRed;
QColor brushColor = Qt::yellow;
penColor.setAlphaF(0.69);
brushColor.setAlphaF(0.19);
pPainter->setPen(penColor);
QwtScaleMap canvasMapX = canvasMap(QwtPlot::xBottom);
QwtScaleMap canvasMapY = canvasMap(QwtPlot::yLeft);
double left = canvasMapX.transform(zoomRegionRect.left());
double top = canvasMapY.transform(zoomRegionRect.top());
QRectF unmappedZoomRegionRect = QRectF(left, top,
canvasMapX.transform(zoomRegionRect.right())-left,
canvasMapY.transform(zoomRegionRect.bottom())-top);
pPainter->fillRect(unmappedZoomRegionRect, brushColor);
pPainter->drawRect(unmappedZoomRegionRect);
// Draw the two sets of coordinates
drawCoordinates(pPainter, zoomRegionRect.topLeft(), penColor, Qt::white, BottomRight, false);
drawCoordinates(pPainter, zoomRegionRect.bottomRight(), penColor, Qt::white, TopLeft, false);
break;
}
default:
// We aren't doing anything special, so just draw our canvas normally
QwtPlot::drawCanvas(pPainter);
}
}