2009-09-01 18 views
11

बिना आवेदन मैं पर काम कर रहा हूँ एक कस्टम यूआई है कि मुझे आवश्यक मुख्य विंडो से शीर्षक पट्टी को हटाने के लिए है।QT4 खींचें विंडो शीर्षक पट्टी

MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent, Qt::CustomizeWindowHint), ui(new Ui::MainWindowClass) 
{ 
    ui->setupUi(this); 

किसी भी विचार: दुर्भाग्य से, मैं समझ नहीं कैसे यह तो मैं स्क्रीन :)

कोड मैं जो शीर्षक पट्टी को हटा रहा है है पर आवेदन स्थानांतरित कर सकते हैं बनाने के लिए पीछा कर रहा है मैं किसी अन्य विजेट या मुख्य रूप विंडो का उपयोग करके खिड़की को कैसे घुमा सकता हूं?

धन्यवाद

उत्तर

13

यह करने के लिए सबसे सहज तरीका विजेट सतह पर क्लिक किया जाएगा और खींच। इसे प्राप्त करने के लिए, आपको कुछ चरणों का पालन करने की आवश्यकता है। जब उपयोगकर्ता प्रेस विजेट के अंदर, एक बूलियन ध्वज सेट और माउस की स्थिति की दुकान और फिर जब बटन जारी की है गलत पर सेट:

विधि इस प्रकार है। अगला कदम विजेट को ले जा रहा है। MouseMoveEvent में, जांचें कि ध्वज सेट है या नहीं। यदि यह सेट है, तो माउस की नई स्थिति लें। नई स्थिति और संग्रहीत एक के बीच अंतर की गणना करें। फिर, विंडो की स्थिति को मूल स्थिति + गणना माउस आंदोलन पर सेट करें। फिर नई माउस स्थिति स्टोर करें।

कोड की आवश्यकता इस होगा:

चेतावनी: यह कोड उदाहरण गलत है और जब खिड़की खींचकर एक कूद व्यवहार का परिणाम देगा। कृपया इसके बजाय Qt Shaped Clock example से कोड का उपयोग करें।

/// Header contents: 
class MyWidget : public QMainWindow 
{ 
protected: 
    void mouseMoveEvent(QMouseEvent* event); 
    void mousePressEvent(QMouseEvent* event); 
    void mouseReleaseEvent(QMouseEvent* event); 
private: 
    QPoint mLastMousePosition; 
    bool mMoving; 
} 
/// Source: 
void MyWidget::mousePressEvent(QMouseEvent* event) 
{ 
    if(event->button() == Qt::LeftButton) 
    { 
     mMoving = true; 
     mLastMousePosition = event->pos(); 
    } 
} 

void MyWidget::mouseMoveEvent(QMouseEvent* event) 
{ 
    if(event->buttons().testFlag(Qt::LeftButton) && mMoving) 
    { 
     this->move(this->pos() + (event->pos() - mLastMousePosition)); 
     mLastMousePosition = event->pos(); 
    } 
} 

void MyWidget::mouseReleaseEvent(QMouseEvent* event) 
{ 
    if(event->button() == Qt::LeftButton) 
    { 
     mMoving = false; 
    } 
} 
+3

भी देखें क्यूटी के आकार का घड़ी उदाहरण है, जो एक ही बात करता है के साथ उपयोग कर सकते हैं -shapedclock.html –

+0

ईरेंडर, एक वर्ष से भी अधिक समय बाद भी मैं आपका जवाब पाने के लिए अपने प्रश्न पर वापस आ गया हूं। इसे उपलब्ध कराने के लिए फिर से धन्यवाद। =) मैं ग्लोबलपोज़() का उपयोग करता हूं, अन्यथा यह अजीब – Michael

+0

@ माइकल धन्यवाद, मैं हमेशा मदद करने में खुश हूं :) – erelender

3

आप की कोशिश करनी चाहिए यह बजाय

class MyWidget : public QMainWindow 
{ 
protected: 
    void mouseMoveEvent(QMouseEvent* event); 
    void mousePressEvent(QMouseEvent* event); 
    void mouseReleaseEvent(QMouseEvent* event); 
private: 
    QPoint mLastMousePosition; 
    bool mMoving; 
} 
/// Source: 
void MyWidget::mousePressEvent(QMouseEvent* event) 
{ 
    if(event->button() == Qt::LeftButton) 
    { 
     mMoving = true; 
     mLastMousePosition = event->pos(); 
    } 
} 

void MyWidget::mouseMoveEvent(QMouseEvent* event) 
{ 
    if(event->buttons().testFlag(Qt::LeftButton) && mMoving) 
    { 
     this->move(this->pos() + (event->pos() - mLastMousePosition)); 
    } 
} 

void MyWidget::mouseReleaseEvent(QMouseEvent* event) 
{ 
    if(event->button() == Qt::LeftButton) 
    { 
     mMoving = false; 
    } 
} 
0

मैं बहुत अच्छी तरह से remenber नहीं है, लेकिन आप एक कस्टम ईवेंट हैंडलर रजिस्टर कर सकते हैं, वहाँ गूगल पर इतने सारे उदाहरण हैं आसान है। माउस ईवेंट की तलाश है, इससे पहले कि आप QObject :: इस() का उपयोग करें और metaobject प्राप्त कर सकते हैं पता करने के लिए वस्तु था के वर्ग दबाया जाता है, तो वस्तु एक qframe या QWidget या किसी अन्य वर्ग है कि आप खिड़की स्थानांतरित करने के लिए उपयोग करना चाहते हैं । तो आप खिड़की खींचने के लिए एक तर्क लागू कर सकते हैं। http://doc.trolltech.com/4.5/widgets: पेशेवरों है कि आप reimplement बिना सभी खिड़की और फ्रेम माउस की घटनाओं के साथ उनमें से हर एक

संबंधित मुद्दे