У меня есть QLabel
, его размер 400x400
и в тексте прописано:
<a href='-'>Link</a>
Мне нужно, чтобы тег a
растянулся на весь QLabel
или был такого же размера как QLabel
.
width
и height
не работает!
Как это можно сделать?
Нужен класс, наследник QObject
, в котором необходимо переопределить виртуальную функцию eventFilter(QObject*, QEvent*)
. Допустим, что лэйбл label
располагается на форме ui
класса MainWindow
. В нём же переопределим вышеобозначенную функцию:
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if(watched->objectName() == "label") {
switch (event->type()) {
case QEvent::Enter:
qApp->setOverrideCursor(Qt::PointingHandCursor);
break;
case QEvent::Leave:
qApp->setOverrideCursor(Qt::ArrowCursor);
break;
case QEvent::MouseButtonRelease:
case QEvent::MouseButtonPress: {
QMouseEvent* mevent = static_cast<QMouseEvent*>(event);
QLabel* label = static_cast<QLabel*>(watched);
QFontMetrics metrics( label->font() );
QTextDocument document;
document.setHtml(label->text());
const auto rect = label->rect();
const auto text = document.toPlainText();
const auto w = metrics.width(text);
const auto h = metrics.height();
const auto align = label->alignment();
//работает, если текст выравнен следующими способами
//при необходимости можно обработать остальные случаи
if(align & Qt::AlignLeft) {
mevent->setLocalPos(QPoint(w/2,h/2));
} else
if(align & Qt::AlignRight){
mevent->setLocalPos(QPoint(rect.width()-w/2, rect.height()/2-h/2));
} else
if(align & Qt::AlignHCenter) {
mevent->setLocalPos(QPoint(rect.width()/2 , rect.height()/2));
}
}
default: break;
}
}
return false;
}
в конструкторе MainWindow
:
ui->label->setOpenExternalLinks(true);
ui->label->installEventFilter(this);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
есть char b[50] = "11 2 6" или он может быть записан char b[50] = "1 23 6"
Надо сделать валидацию перед сабмитом, а после показать блок успешной отправки
Вопрос такой, есть у меня массив из объектов класса, например, MyClass: