Мой вопрос в основном тот же, что и этот , но применяется к структуре Qt C ++.
Я реализую всплывающее окно, унаследовав QWidget с флагами Qt :: QPopup | Qt :: QWindow. Я хотел бы, чтобы это окно можно было перемещать и изменять размер, в настоящее время я добиваюсь этого, используя события мыши в следующем коде:
void TextPopup::mousePressEvent(QMouseEvent* event)
{
offset = event->pos();
QWidget::mousePressEvent(event);
}
void TextPopup::mouseMoveEvent(QMouseEvent* event)
{
if(event->buttons() & Qt::LeftButton)
if(resizeMode) {
QPoint p = mapToGlobal(event->pos()) - geometry().topLeft();
resize(p.x(), p.y());
} else
move(mapToParent(event->pos() - offset));
else {
QPoint diff = geometry().bottomRight() - mapToGlobal(event->pos());
if(diff.x() <= 6 && diff.y() <= 6) {
if(!resizeMode) {
setCursor(Qt::SizeFDiagCursor);
resizeMode = true;
}
} else {
if(resizeMode) {
setCursor(Qt::SizeAllCursor);
resizeMode = false;
}
}
}
}
void TextPopup::mouseReleaseEvent(QMouseEvent* event)
{
offset = QPoint();
QWidget::mouseReleaseEvent(event);
}
У меня с этим несколько проблем. Во-первых, я предполагаю, что есть способ сделать это лучше. И что еще более важно, я хотел бы, чтобы в правом нижнем углу был символ изменения размера, как на этом изображении] (взято из упомянутого выше сообщения). Есть какие-нибудь предложения по достижению этого?