Qt QDialog прерывистый при вызове move()

#qt #move #qtextedit #qdialog

#qт #переместить #qtextedit #qdialog #qt

Вопрос:

Я пытаюсь создать всплывающий текстовый редактор в Qt. Проблема, с которой я сталкиваюсь, заключается в том, что, поскольку я делаю диалоговое окно без полей, мне приходится вызывать функцию move () самостоятельно. Это вызывает некоторые странные поведения, которые я хотел бы выяснить. Я заметил следующие сценарии:

  1. Если я создам поле без текстового редактора, то перемещение будет в порядке. Он становится прерывистым только тогда, когда я добавляю редактор.
  2. Если я сделаю это обычным диалоговым окном (вместо использования флага Qt:: Popup в конструкторе), то перемещение будет в порядке с редактором или без него.

Вот некоторый код для демонстрации:

 #include "textpopup.h"

#include <QPoint>
#include <QMouseEvent>
#include <QPushButton>
#include <QDebug>

TextPopup::TextPopup(QWidget* parent) :
    QDialog(parent, Qt::Popup) // removing Qt::Popup flag gets rid of choppy-ness
{
    setLayout(amp;layout);
    layout.addWidget(amp;textEdit); // removing this gets rid of choppy-ness
    resize(200, 200);
    setFocusPolicy(Qt::StrongFocus);
}

void TextPopup::mousePressEvent(QMouseEvent* event)
{
    offset = event->globalPos() - frameGeometry().topLeft();
    previous = event->globalPos();
    QDialog::mousePressEvent(event);
}

// move whenever user drags widget (does not apply to text editor)
void TextPopup::mouseMoveEvent(QMouseEvent* event)
{
    qDebug() << "move";
    if(event->buttons() == Qt::LeftButton) {
        move(event->globalPos() - offset);
    }
}
  

Комментарии:

1. вы пробовали использовать флаг Qt:: Dialog вместо флага Qt::Popup? чего вы добиваетесь, используя Qt::Popup флаг?

2. Мне не нужна строка заголовка, которая сопровождается использованием флага Qt::Dialog.

Ответ №1:

На случай, если кому-то интересно, я нашел решение — оно, по крайней мере, работает. Вместо использования флага Qt:: Popup я использовал флаг Qt :: SplashScreen, который также не имеет строки заголовка и не демонстрирует прерывистое поведение.