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);
}
}