调用move()时Qt QDialog不稳定

时间:2011-06-11 17:38:05

标签: qt move qtextedit qdialog

我正在尝试在Qt中创建一个弹出文本编辑器。我遇到的问题是,由于我正在使对话框无边界,我必须自己调用move()函数。这引起了一些奇怪的行为,我想弄清楚。我注意到以下情况:

  1. 如果我在没有文本编辑器的情况下制作盒子,那么移动就可以了。只有当我添加编辑器时,它才会变得不稳定。
  2. 如果我将它设为普通对话框(而不是在构造函数中使用Qt :: Popup标志),那么无论有没有编辑器,移动都可以。
  3. 以下是一些要演示的代码:

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

1 个答案:

答案 0 :(得分:0)

如果有人感兴趣,我找到了一个解决方案 - 它至少有效。我没有使用Qt :: Popup标志,而是使用了Qt :: SplashScreen标志,该标志也没有标题栏,也没有出现不连贯的行为。