0

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(&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);
    }
}
4

1 に答える 1

0

誰かが興味を持っている場合、私は解決策を見つけました-それは少なくともうまくいきます。Qt :: Popupフラグを使用する代わりに、タイトルバーがなく、途切れ途切れの動作を示さないQt::SplashScreenフラグを使用しました。

于 2011-06-13T03:27:49.190 に答える