Qt: Изменить размер виджета без полей

Мой вопрос в основном тот же, что и этот , но применяется к структуре 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);
}

У меня с этим несколько проблем. Во-первых, я предполагаю, что есть способ сделать это лучше. И что еще более важно, я хотел бы, чтобы в правом нижнем углу был символ изменения размера, как на этом изображении] (взято из упомянутого выше сообщения). Есть какие-нибудь предложения по достижению этого?

enter image description here

5
задан Zoe 23 May 2019 в 19:21
поделиться