我正在尝试在 Qt 中创建一个弹出式文本编辑器。我遇到的问题是,由于我使对话框无边界,因此我必须自己调用 move() 函数。这导致了一些我想弄清楚的奇怪行为。我注意到以下情况:
- 如果我在没有文本编辑器的情况下制作盒子,那么移动就可以了。只有当我添加编辑器时,它才会变得不稳定。
- 如果我让它成为一个普通的对话框(而不是在构造函数中使用 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(&layout);
layout.addWidget(&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);
}
}