如何在 paintEvent 中保留一个可编辑的 QLabel
How to keep an editable QLabel inside paintEvent
我想在 paintEvent
内的水平布局中保留一个椭圆和 QLabel
,并且希望 QLabel
可以在双击时进行编辑。
void CascadeColorHighlightWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
m_contRect = contentsRect().adjusted(1, 1, -1, -1);
painter.setPen(QPen(QColor(176, 176, 176),1));
painter.setBrush(QColor(255,255,255));
painter.drawRect(m_contRect);
painter.setPen(QPen(QColor(51,51,51),1));
QFont font( "Calibri" );
font.setPixelSize(14);
painter.setFont( font );
painter.drawText(QPointF(m_contRect.x() + 18, m_contRect.y() + 28), "Color Highlight");
int rectYPos = m_contRect.y() + 55;
painter.setPen(Qt::NoPen);
QRectF ellipseRect = QRectF(m_contRect.x() + 18, rectYPos, 16, 16);
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(224,90,90));
painter.drawEllipse(ellipseRect);
QLabel dummy;
dummy.setText("Density");
dummy.setTextInteractionFlags(Qt::TextEditable);
QStyleOptionFrameV2 panel;
panel.initFrom(&dummy);
panel.rect = QRect(m_contRect.x() + 54, m_contRect.y() + 48, 100, 30); // QFontMetric could provide height.
panel.lineWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, &panel, &dummy);
style()->drawPrimitive(QStyle::PE_PanelLineEdit, &panel, &painter, this);
}
当用户将焦点指向 QLabel 图像时,创建新的 QLabel 对象,移动到适当的 window 位置并设置文本。用户将看到 "living" 编辑器。当用户移出焦点时,移除 QLabel 对象并使用 QLabel 图片重新绘制您的图像。
我想在 paintEvent
内的水平布局中保留一个椭圆和 QLabel
,并且希望 QLabel
可以在双击时进行编辑。
void CascadeColorHighlightWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
m_contRect = contentsRect().adjusted(1, 1, -1, -1);
painter.setPen(QPen(QColor(176, 176, 176),1));
painter.setBrush(QColor(255,255,255));
painter.drawRect(m_contRect);
painter.setPen(QPen(QColor(51,51,51),1));
QFont font( "Calibri" );
font.setPixelSize(14);
painter.setFont( font );
painter.drawText(QPointF(m_contRect.x() + 18, m_contRect.y() + 28), "Color Highlight");
int rectYPos = m_contRect.y() + 55;
painter.setPen(Qt::NoPen);
QRectF ellipseRect = QRectF(m_contRect.x() + 18, rectYPos, 16, 16);
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(224,90,90));
painter.drawEllipse(ellipseRect);
QLabel dummy;
dummy.setText("Density");
dummy.setTextInteractionFlags(Qt::TextEditable);
QStyleOptionFrameV2 panel;
panel.initFrom(&dummy);
panel.rect = QRect(m_contRect.x() + 54, m_contRect.y() + 48, 100, 30); // QFontMetric could provide height.
panel.lineWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, &panel, &dummy);
style()->drawPrimitive(QStyle::PE_PanelLineEdit, &panel, &painter, this);
}
当用户将焦点指向 QLabel 图像时,创建新的 QLabel 对象,移动到适当的 window 位置并设置文本。用户将看到 "living" 编辑器。当用户移出焦点时,移除 QLabel 对象并使用 QLabel 图片重新绘制您的图像。