我正在尝试在Qt中创建一个弹出文本编辑器。我遇到的问题是,由于我正在使对话框无边界,我必须自己调用move()函数。这引起了一些奇怪的行为,我想弄清楚。我注意到以下情况:
以下是一些要演示的代码:
#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);
}
}
答案 0 :(得分:0)
如果有人感兴趣,我找到了一个解决方案 - 它至少有效。我没有使用Qt :: Popup标志,而是使用了Qt :: SplashScreen标志,该标志也没有标题栏,也没有出现不连贯的行为。