C++ 如何在Qt中的正确区域(考虑样式表)中绘制文本?
我试图删除C++ 如何在Qt中的正确区域(考虑样式表)中绘制文本?,c++,c,qt,C++,C,Qt,我试图删除QLabel(子类化为标签)中的文本。问题在于自定义的paintEvent()不尊重样式表设置的变量(尤其是填充/边距)。我该如何解决这个问题 正如你所看到的,我有一个解决方案,它做的大部分事情都是正确的,但是边距不能正常工作。另一个解决方案远未奏效,但方向是正确的。我知道我需要使用QStyle来获得区域的大小,但我不明白。文档真的很混乱 void Label::paintEvent(QPaintEvent *event){ if (this->elide == Qt::
QLabel
(子类化为标签)中的文本。问题在于自定义的paintEvent()
不尊重样式表设置的变量(尤其是填充/边距)。我该如何解决这个问题
正如你所看到的,我有一个解决方案,它做的大部分事情都是正确的,但是边距不能正常工作。另一个解决方案远未奏效,但方向是正确的。我知道我需要使用QStyle
来获得区域的大小,但我不明白。文档真的很混乱
void Label::paintEvent(QPaintEvent *event){
if (this->elide == Qt::ElideNone){
QLabel::paintEvent(event);
return;
}
QPainter p(this);
QFontMetrics fm(font());
if (fm.width(text()) > contentsRect().width()) {
if (1){ //this kind of works...
QRect rect = this->contentsRect();
rect.adjust(this->margin(), this->margin(), -this->margin(), -this->margin());
QString elided_txt = this->fontMetrics().elidedText(text(), this->elide, rect.width(), Qt::TextShowMnemonic); //This is the key line.
p.drawText(rect(), elided_txt, QTextOption(Qt::AlignVCenter | Qt::AlignLeft));
} else { //the correct solution should look something like this:
QStyle *style = this->style();
QRect rect = style->itemTextRect(fm, this->rect(), Qt::AlignVCenter | Qt::AlignHCenter, true, this->text());
QString elided_txt = this->fontMetrics().elidedText(text(), this->elide, rect.width(), Qt::TextShowMnemonic); //This is the key line.
style->drawItemText(&p, this->rect(), Qt::AlignVCenter | Qt::AlignLeft, this->palette(), true, elided_txt);
}
} else {
QLabel::paintEvent(event);
}
}
你找到解决这个问题的办法了吗?我有一个类似的问题,看到了吗