2011-06-11 58 views
0

我試圖在Qt中創建一個彈出文本編輯器。我遇到的問題是,因爲我正在使對話框無邊界,所以我必須自己調用move()函數。這導致了我想弄明白的一些奇怪的行爲。我已經注意到以下情況:Qt QDialog在調用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); 
    } 
} 
+0

您是否嘗試過使用Qt :: Dialog標誌而不是Qt :: Popup標誌?你在使用'Qt :: Popup'標誌時尋求什麼? – Abhijith 2011-06-12 03:45:14

+0

我不想使用Qt :: Dialog標誌的標題欄。 – buck 2011-06-13 03:25:41

回答

0

如果有人有興趣,我發現了一個解決方案 - 它至少起作用。而不是使用Qt :: Popup標誌,我使用了Qt :: SplashScreen標誌,該標誌也沒有標題欄,並且不顯示波濤洶涌的行爲。

相關問題