Qt cpp WARAugmentedRealityOneSenceCoverLabelItemIcon paintEvent中绘制 图标在上方,文字在图标下方。均横向居中,文字加图标组合 竖向居中
时间: 2024-02-09 18:11:56 浏览: 52
您好,根据您的需求,可以按照以下步骤进行绘制:
1. 首先,在paintEvent中获取QPainter对象,并设置字体、颜色等属性。
2. 然后,计算出图标和文字的位置。可以使用QFontMetrics类来获取文字的宽度和高度,使用QPixmap类来获取图标的大小。
3. 接着,先绘制图标,使用QPainter::drawPixmap()方法来绘制。
4. 最后,绘制文字,使用QPainter::drawText()方法来绘制。
下面是一份示例代码,供您参考:
```cpp
void WARAugmentedRealityOneSenceCoverLabelItemIcon::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
// 获取QPainter对象
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
// 设置字体、颜色等属性
QFont font = QFont("Microsoft YaHei", 12);
painter.setFont(font);
painter.setPen(QColor("#333"));
// 计算图标和文字的位置
QPixmap iconPixmap = QPixmap(":/images/icon.png");
int iconWidth = iconPixmap.width();
int iconHeight = iconPixmap.height();
int textWidth = fontMetrics().width(m_text);
int textHeight = fontMetrics().height();
int totalWidth = iconWidth + 10 + textWidth;
int totalHeight = qMax(iconHeight, textHeight);
int x = (width() - totalWidth) / 2;
int y = (height() - totalHeight) / 2;
int iconX = x;
int iconY = y + (totalHeight - iconHeight) / 2;
int textX = iconX + iconWidth + 10;
int textY = y + (totalHeight - textHeight) / 2 + fontMetrics().ascent();
// 先绘制图标
painter.drawPixmap(iconX, iconY, iconPixmap);
// 再绘制文字
painter.drawText(textX, textY, m_text);
}
```
希望能够帮助到您!
阅读全文