效果:
以中间为准的尺
int resolutionWidth = m_resolution.width();
int resolutionHeight = m_resolution.height();
QPixmap pixmap(resolutionWidth, resolutionHeight);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setPen(QPen(Qt::red, 2)); // 设置画笔颜色为红色,宽度为2
// 绘制垂直线
painter.drawLine(resolutionWidth / 2, 0, resolutionWidth / 2, resolutionHeight);
// 绘制水平线
painter.drawLine(0, resolutionHeight / 2, resolutionWidth, resolutionHeight / 2);
int centerX = resolutionWidth / 2;
int centerY = resolutionHeight / 2;
// 在十字中间添加值
QString centerText = "Center";
QRectF centerRect(centerX + 20, centerY , 40, 20);
painter.drawText(centerRect, Qt::AlignCenter, centerText);
// // 绘制量尺
int rulerLength = m_resolution.width(); // 量尺长度
int tickSpacing = 10; // 刻度间距
// 绘制水平中心线上的量尺
int rulerStartXHorizontal = centerX - rulerLength / 2; // 水平量尺起始位置X坐标
int rulerStartYHorizontal = centerY; // 水平量尺起始位置Y坐标
for (int i = 0; i <= rulerLength; i += tickSpacing) {
int tickHeight = (i % (tickSpacing * 5) == 0) ? 20 : 10; // 长刻度的高度为20,短刻度的高度为10
painter.drawLine(rulerStartXHorizontal + i , rulerStartYHorizontal , rulerStartXHorizontal + i, rulerStartYHorizontal - tickHeight ); // 绘制刻度线
}
// 绘制垂直中心线上的量尺
int rulerStartXVertical = centerX; // 垂直量尺起始位置X坐标
int rulerStartYVertical = centerY + rulerLength / 2; // 垂直量尺起始位置Y坐标
for (int i = 0; i <= rulerLength; i += tickSpacing) {
int tickWidth = (i % (tickSpacing * 5) == 0) ? 20 : 10; // 长刻度的宽度为20,短刻度的宽度为10
painter.drawLine(rulerStartXVertical, rulerStartYVertical - i, rulerStartXVertical - tickWidth, rulerStartYVertical - i); // 绘制刻度线
}
ui->workWidget->updatePixmap1(pixmap); // 更新 workWidget 上显示的图像
int resolutionWidth = m_resolution.width();
int resolutionHeight = m_resolution.height();
QPixmap pixmap(resolutionWidth, resolutionHeight);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setPen(QPen(Qt::red, 1)); // 设置画笔颜色为红色,宽度为2
// 绘制垂直线
painter.drawLine(resolutionWidth / 2, 0, resolutionWidth / 2, resolutionHeight);
// 绘制水平线
painter.drawLine(0, resolutionHeight / 2, resolutionWidth, resolutionHeight / 2);
int centerX = resolutionWidth / 2;
int centerY = resolutionHeight / 2;
QString filePath = QCoreApplication::applicationDirPath() + "/config.ini";
QSettings settings(filePath, QSettings::IniFormat);
double TmpPixelvalue;
QString TmpMeasurementValue;
if(settings.value("Pixelvalue").toDouble() != 0.0){
TmpPixelvalue=settings.value("Pixelvalue").toDouble();
}
if(settings.value("MeasurementValue").toString()!=QString("")){
TmpMeasurementValue=settings.value("MeasurementValue").toString();
}
// centerX = 横坐标中心原点;
// centerY = 纵坐标中心原点;
// // 绘制量尺
int rulerLength = m_resolution.width(); // 量尺长度
int tickSpacing = 5; // 刻度间距
float Tmpscale = tickSpacing * 10 / TmpPixelvalue;
// 在十字中间添加值
QString centerText = QString("%1 %2").arg(QString::number(Tmpscale, 'f', 1) ).arg(TmpMeasurementValue);
QRectF centerRect(centerX, centerY, 100, 20); // 调整矩形区域大小为80x20,可以根据需要进行调整
painter.drawText(centerRect, Qt::AlignCenter, centerText);
// 绘制水平中心线上的量尺
int rulerStartXHorizontal = centerX; // 水平量尺起始位置X坐标
int rulerStartYHorizontal = centerY; // 水平量尺起始位置Y坐标
for (int i = 0; i <= rulerLength/2; i += tickSpacing) {
int tickHeight = 0;
if (i % (tickSpacing * 10) == 0) { // 长刻度
tickHeight = 15;
} else if (i % (tickSpacing * 5) == 0) { // 中等刻度
tickHeight = 10;
} else { // 短刻度
tickHeight = 5;
}
painter.drawLine(rulerStartXHorizontal + i, rulerStartYHorizontal, rulerStartXHorizontal + i, rulerStartYHorizontal - tickHeight); // 绘制刻度线
painter.drawLine(rulerStartXHorizontal - i, rulerStartYHorizontal, rulerStartXHorizontal - i, rulerStartYHorizontal - tickHeight); // 绘制刻度线
}
// 绘制垂直中心线上的量尺
int rulerStartXVertical = centerX; // 垂直量尺起始位置X坐标
int rulerStartYVertical = centerY ; // 垂直量尺起始位置Y坐标
for (int i = 0; i <= rulerLength /2; i += tickSpacing) {
// int tickWidth = (i % (tickSpacing * 5) == 0) ? 20 : 10; // 长刻度的宽度为20,短刻度的宽度为10
int tickWidth = 0;
if (i % (tickSpacing * 10) == 0) { // 长刻度
tickWidth = 15;
} else if (i % (tickSpacing * 5) == 0) { // 中等刻度
tickWidth = 10;
} else { // 短刻度
tickWidth = 5;
}
painter.drawLine(rulerStartXVertical, rulerStartYVertical - i, rulerStartXVertical - tickWidth, rulerStartYVertical - i); // 绘制刻度线
painter.drawLine(rulerStartXVertical, rulerStartYVertical + i, rulerStartXVertical - tickWidth, rulerStartYVertical + i); // 绘制刻度线
}