Qt cpp QPainter 在 rect 19, 0, 0,255内绘制文字“什么数据” ,要求文字靠左居中
时间: 2024-03-13 14:47:40 浏览: 110
您可以使用QPainter的drawText函数来绘制文字,实现文字靠左居中的效果,需要先计算出文字的矩形大小,然后将其左上角定位在指定的矩形区域内。
例如,您可以使用以下代码来实现该效果:
```
QPainter painter;
painter.begin(this);
QFont font("Arial", 12, QFont::Normal);
painter.setFont(font);
QString text = "什么数据";
QRect textRect = painter.boundingRect(QRect(19, 0, 0, 255), Qt::AlignLeft | Qt::AlignVCenter, text);
QPoint textPos = QPoint(19, 0) + QPoint(0, (255 - textRect.height()) / 2);
painter.drawText(QRect(textPos, textRect.size()), Qt::AlignLeft | Qt::AlignVCenter, text);
painter.end();
```
其中,QRect(19, 0, 0, 255)指定了绘制文字的矩形区域,Qt::AlignLeft | Qt::AlignVCenter指定了文字的对齐方式为靠左居中,textRect计算了文字的实际矩形大小,textPos则为文字的左上角坐标。最后调用drawText函数绘制文字即可。
相关问题
Qt cpp QPainter 在窗口点位 x,y 绘制两个同心圆,中心的同心圆为实心,直径为10px,外围的为空心,直径为20px。外围圆在上下左右加上10px的线段。以x y 为中心 A,水平向右边为0度,顺时针方向为正方向。角度为n 绘制长度为 nlength的线段AB。在B的位置绘制永远水平的线段B C 长度为 nBC。如果AB指向左则BC指向左,如果AB 指向右,则BC指向右边。再点C处绘制一个矩形,C点位于矩形的侧边中点 。矩形的方向同BC的方向,矩形的长度不固定,最长为235px, 在矩形内绘制文字,要求文字距离左右边距为22px,上下边距为10px。 如果文字长度过长则使用省略号代替。要求文字居中不被遮盖。
好的,这是一个比较复杂的绘图问题,需要用到 QPainter 类库进行绘图操作。以下是实现该需求的代码:
```cpp
void MyWidget::paintEvent(QPaintEvent *event)
{
// 创建 QPainter 对象
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// 绘制同心圆
QPoint center(x, y);
painter.setBrush(QBrush(Qt::black));
painter.drawEllipse(center, 10, 10);
painter.setBrush(Qt::NoBrush);
painter.drawEllipse(center, 20, 20);
// 绘制线段 AB
double radians = n * M_PI / 180.0;
QPoint A = center;
QPoint B(center.x() + nLength * cos(radians), center.y() - nLength * sin(radians));
painter.drawLine(A, B);
// 绘制线段 BC
QPoint C(B.x() + (B.x() < A.x() ? -nBC : nBC), B.y());
painter.drawLine(B, C);
// 计算矩形的宽度和长度
int rectWidth = qMin(235, qAbs(C.x() - B.x()));
int rectHeight = qMin(100, qAbs(C.y() - B.y())) - 20;
// 绘制矩形
QRect rect(C.x() - rectWidth / 2, C.y() - rectHeight / 2, rectWidth, rectHeight);
painter.drawRect(rect);
// 绘制文字
QString text = "This is a test text.";
QFont font("Arial", 10);
painter.setFont(font);
QRect textRect(rect.left() + 22, rect.top() + 10, rect.width() - 44, rect.height() - 20);
QString displayText = painter.fontMetrics().elidedText(text, Qt::ElideRight, textRect.width());
painter.drawText(textRect, Qt::AlignCenter, displayText);
}
```
其中,`x` 和 `y` 分别表示圆心的 x 坐标和 y 坐标,`n` 表示角度,`nLength` 表示线段 AB 的长度,`nBC` 表示线段 BC 的长度。在 `paintEvent` 函数中,我们首先创建了一个 QPainter 对象,并设置了抗锯齿模式。接着,我们使用 `setBrush` 函数设置了绘制同心圆时的画刷,分别绘制了一个实心圆和一个空心圆。然后,我们根据角度和长度计算出点 A 和点 B 的坐标,并使用 `drawLine` 函数绘制了线段 AB。接着,我们根据线段 AB 的方向和长度计算出点 C 的坐标,并使用 `drawLine` 函数绘制了线段 BC。接下来,我们根据线段 BC 的方向和长度计算出矩形的坐标和尺寸,并使用 `drawRect` 函数绘制了矩形。最后,我们使用 `drawText` 函数在矩形内绘制了文本。为了保证文字居中不被遮盖,我们使用了 `fontMetrics().elidedText` 函数来处理过长的文本,并使用 `Qt::AlignCenter` 参数来让文本居中显示。
Qt cpp再QPixmap wndBackFoucsPixmapTemp 内边距 上下左右20px的中心作为绘制区域,居中绘制pixmap a
好的,你可以使用QPainter类来实现这个功能。首先,你需要创建一个QPainter对象,并将它的绘制区域设置为wndBackFoucsPixmapTemp的中心,使用QRect类的中心点坐标和大小来计算出绘制区域。然后,你可以使用QPainter的drawPixmap函数来在绘制区域居中绘制pixmap a。
代码示例:
```
QPainter painter(&wndBackFoucsPixmapTemp);
int x = (wndBackFoucsPixmapTemp.width() - 2 * 20 - pixmap_a.width()) / 2 + 20;
int y = (wndBackFoucsPixmapTemp.height() - 2 * 20 - pixmap_a.height()) / 2 + 20;
QRect rect(x, y, pixmap_a.width(), pixmap_a.height());
painter.drawPixmap(rect, pixmap_a);
```
注意,这里的20是指内边距的大小,你可以根据实际需求进行修改。同时,还需要注意pixmap a的大小不能超过绘制区域的大小,否则会被裁剪。
阅读全文