- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用下面的代码在qt中绘制一个图的轴:
...
static const std::array<const QPointF,10*2> horizontalAxis = {
QPointF(0.f,0.f), QPointF(1.f,0.f),
// Horizontal scales
QPointF(0.f,0.f), QPointF(0.f,1.f),
QPointF(0.125f,0.f), QPointF(0.125f,1.f),
QPointF(0.25f,0.f), QPointF(0.25f,1.f),
QPointF(0.375f,0.f), QPointF(0.375f,1.f),
QPointF(0.5f,0.f), QPointF(0.5f,1.f),
QPointF(0.625f,0.f), QPointF(0.625f,1.f),
QPointF(0.75f,0.f), QPointF(0.75f,1.f),
QPointF(0.875f,0.f), QPointF(0.875f,1.f),
QPointF(1.f,0.f), QPointF(1.f,1.f)
};
static const std::array<const QPointF,6*2> verticalAxis = {
QPointF(0.f,0.f), QPointF(0.f,1.f),
// Vertical scales
QPointF(0.f,0.f), QPointF(-1.f,0.f),
QPointF(0.f,0.25f), QPointF(-1.f,0.25f),
QPointF(0.f,0.5f), QPointF(-1.f,0.5f),
QPointF(0.f,0.75f), QPointF(-1.f,0.75f),
QPointF(0.f,1.f), QPointF(-1.f,1.f)
};
...
void Plot::paint(QPainter& p)
{
int const width = p.device()->width();
int const height = p.device()->height();
Q_ASSERT(width > xpaddingLeft + xpaddingRight);
Q_ASSERT(height > ypaddingTop + ypaddingBottom);
if(dirty) {
recalculate();
}
p.save();
int const bottomLeftX = xpaddingLeft;
int const bottomLeftY = height - ypaddingBottom;
int const scaleX = width - xpaddingLeft - xpaddingRight;
int const scaleY = height - ypaddingTop - ypaddingBottom;
p.setRenderHint(QPainter::HighQualityAntialiasing,false);
p.setRenderHint(QPainter::Antialiasing,false);
QPen pen(QBrush(QColor::fromRgb(0,0,0)), 2);
pen.setCosmetic(true); // Do not apply scale to the pen
p.setPen(pen);
// Horizontal Axis
p.resetTransform();
p.translate(bottomLeftX,bottomLeftY); // Origin at bottom left
p.scale(scaleX,scaleSize); // y-axis points down. Only scale y to match the scale-mark size
p.drawLines(&horizontalAxis[0], (int)horizontalAxis.size());
// Vertical Axis
p.resetTransform();
p.translate(bottomLeftX,bottomLeftY);
p.scale(scaleSize,-scaleY); // y-axis points up. Only scale x to match the scale-mark size
p.drawLines(&verticalAxis[0], (int)verticalAxis.size());
...
}
这会产生如下图,其中 lhs 有一个奇怪的伪像(仅显示没有加载数据的轴):
水平轴刻度导致 LHS 出现奇怪的伪影
注释掉水平比例定义的所有 QPointF 定义可以消除这个奇怪的工件。然而,评论任何一对单独的点似乎并不影响它。如果我不再使用 drawLines() 方法,如下所示,拉伸(stretch)就会消失。
//p.drawLines(&horizontalAxis[0], (int)horizontalAxis.size());
for(size_t k = 0; k < horizontalAxis.size()-1; k += 2) p.drawLine(horizontalAxis[k],horizontalAxis[k+1]);
我得到如下结果,没有任何伪影(仅显示未加载数据的轴):
水平轴刻度显示没有切换
我是不是遗漏了什么或者这是 drawLines() 中的错误?
我使用 drawLines()
函数两次来绘制垂直轴和实际数据(作为折线图),没有(明显的)问题,但我想更确定它不会在我无法测试的情况下导致奇怪的伪影。
最佳答案
您正在使用的 drawLines()
重载是(来自 Qt5 文档):
QPainter::drawLines (const QPointF* pointPairs, int lineCount)
请注意第二个参数。它称为 lineCount
,而不是点计数,因此您必须传递一半的点数:
assert (0 == horizontalAxis.size () % 2);
p.drawLines (&horizontalAxis[0], static_cast<int> (horizontalAxis.size () / 2));
关于c++ - QPainter 绘制线条方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35520704/
我在使用 QPainter 绘制不同颜色的线条和文本时遇到问题。我正在使用以下代码来实现此目的,但它不起作用。线条和文本都是使用绘制文本的颜色集绘制的。 void MyWidget::drawHorL
我正在尝试使用 QPainter(QT5.8,win64)绘制一个带有多个孔的多边形。我正在使用以下代码: QPainter pm(&image); QPen p(Qt::gray, 2); p.se
我要做什么 –对Qt编写的共享库进行JNI调用。在C++方面,我正在使用QPainter和QSvgRender来处理svg图像并返回一个简单的QImage。 QImage im; QPainter p
我有一些需要大量绘画的饼形小部件。所以我想在 QPainter 在 PaintEvent 中绘制后对其进行缓存。并稍后重用它。有没有直接或黑客的方法来做到这一点? 最佳答案 使用QPixmap作为缓存
是否有机会找出QPainter的大小?我正在使用 QPainter 来绘制移动应用程序的整个图形界面。问题是某些应用程序在窗口上覆盖了每个设备大小不同的菜单,从而使事情几乎不可能!是否有可能在不知道
上下文 我有一个自定义小部件,它应该制作点移动的动画,以便制作一种加载小部件。为了实现这个目标,我开始使用 QPainter 和 QVariantAnimation 对象,这似乎是完成这项工作的不错的
我有一个自定义的 QQuickPaintedItem,它可以绘制用户用鼠标在其上绘制的任何内容。到目前为止,实现非常简单,只需绘制整个图像,即使在放大时也是如此。我注意到放大和平移图像时 FPS 真的
我正在尝试在具有白色背景的 QFrame 上绘制两个具有相同颜色和透明度的矩形。这些矩形应该重叠并且它们的透明度不应该改变(也在重叠区域)。所以像这样: 这是我目前的代码: class Canvas
我有下面的代码通过QPainter显示一些文本 QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); paint
我使用下面的代码在qt中绘制一个图的轴: ... static const std::array horizontalAxis = { QPointF(0.f,0.f), QPointF(1.
我想在整个圆圈周围绘制那些黑点,彼此之间有规则的间距(下图的粗略图)。那些黑点应该直接坐在圆圈上。有没有一种简单的方法可以用 painter.drawArc() 函数或类似的东西来做这件事? 最佳答案
我正在学习 Qt。我没有意识到 the exercise of chapter 11 of Qt tutorial ,上面写着“当炮弹在空中时改变大炮的颜色”。我选择在 paintCannon 函数中
我创建了一个名为 painter 的类,并在将 QMainWindow 作为参数传递的构造函数中创建了 QPainter p。 所以在 mainwindow.h 中我添加了: protected:
我是Qt初学者,想用QPainter。 我的流程是这样的:我从串口接收数据坐标(x,y),比如(1,1), (2,3),等。我想在每次收到数据时在窗口中绘制这些点。 我看到 QPainter 在事件中
我有一个 QWidget,我在其中使用 QPainter 对象绘制一些点,但是当调用 update() 方法时,QWidget 的绘制被完全清除。有什么方法可以保存实际状态并只添加点,或者我必须保存每
这是我第一次使用 Qt,我必须制作一个与 Qt 等效的 MSPaint。然而,我在画线时遇到了麻烦。我目前可以通过单击屏幕上的某处并在其他地方释放来绘制一条线,但是当我绘制第二条线时,前一条线将被删除
以下代码会导致一堆错误: void MainWindow::displayBoard() { QPixmap pix(0,0); pix.fill(Qt::white); QP
我对书中示例和我的版本之间的差异感到困惑。Qt 版本 5.12.0 如示例所示: 从我的输出中可以看出: 首先,目标和源 In/Atop 模式的图片不同。而且,另一件值得注意的事情是,我们可以将矩形视
问题很简单!我想要这样的东西。要么使用 QPainter类或使用 Qt 图形框架 : 最佳答案 有几种方法可以使用 QPainterPath 来做到这一点。指定 here . 这是该页面的第二个示例:
默认情况下,QPainter 的原点位于左上角。我想绘制形状,但我拥有的所有坐标都在笛卡尔系统中。所以我的问题 - 如何将原点更改为左下角?当然,我可以 scale(1,-1) 但 drawText(
我是一名优秀的程序员,十分优秀!