2010-03-03 11 views
7

Hy वहाँ,क्यूटी - (? धीमी रीपेंट) फ़्रेमरहित खिड़की चलती

मैं क्यूटी के लिए नया हूँ और मैं एक फ़्रेमरहित खिड़की है, जो dragable है बनाने की कोशिश की। समस्या यह है कि, अगर मैं खिड़की चलाता हूं .. हजारों (यह क्षमा करें, अंग्रेजी में इसका वर्णन कैसे करें) मुझे तब तक नहीं रोकना चाहिए जब तक कि मैं रुक जाऊं। क्या इसे ठीक करने का कोई तरीका है, या क्या मैं गलत तरीके से सोच रहा हूं?

MyWindow.h

#include <QMainWindow> 
#include <QLabel> 
#include <QPushButton> 
#include <QMouseEvent> 

class MyWindow : public QMainWindow { 
    Q_OBJECT 
private: 
    QLabel *label_title,*label_quit; 
    QPushButton *bn_exit; 
    QPixmap *pixmap; 
    QPoint m_dragPosition; 

public: 
    MyWindow(QMainWindow *parent = 0, Qt::WindowFlags flags = 0); 
protected: 
    void paintEvent(QPaintEvent *event); 
    void mouseMoveEvent(QMouseEvent *event); 
    void mousePressEvent(QMouseEvent *event); 
}; 

MyWindow.cpp

#include "MyWindow.h" 
#include <QApplication> 
#include <QPainter> 
#include <QLabel> 

MyWindow::MyWindow(QMainWindow *parent, Qt::WindowFlags flags) : QMainWindow(parent,flags) { 

    resize(1024,576); 
    setWindowTitle("Versuch1"); 

    //Titel 
    label_title = new QLabel("irgendwas",this); 
    label_title->setGeometry(10,10,500,40); 
    label_title->setStyleSheet("font-family: Arial; letter-spacing: 4px;font-weight:bold; color : white;font-size: 30px"); 

    //Exit-Button 
    bn_exit = new QPushButton("[Exit]",this); 
    bn_exit->setGeometry(975,10,40,20); 
    bn_exit->setStyleSheet("QPushButton {font-family: Verdana; font-size:15px; top:0px; border: none; background-color:#101010; color:white} QPushButton:hover {color: red }"); 
    connect(bn_exit,SIGNAL(clicked()),qApp,SLOT(quit())); 
} 


void MyWindow::paintEvent(QPaintEvent *event) // Painter 
{ 
    QPainter painter(this); 
    painter.setPen(Qt::NoPen); // deactivate Border 

    painter.setBrush(QBrush("#101010")); // black title and footer 
    painter.drawRect(0, 0, 1024, 60); 

    painter.setBrush(QBrush("#101010")); 
    painter.drawRect(0, 516, 1024, 576); 
} 
void MyWindow::mouseMoveEvent(QMouseEvent *event) 
{ 
    if (event->buttons() & Qt::LeftButton) { 
     move(event->globalPos() - m_dragPosition); 
     event->accept(); 
    } 
} 
void MyWindow::mousePressEvent(QMouseEvent *event) 
{ 
    if (event->button() == Qt::LeftButton) { 
     m_dragPosition = event->globalPos() - frameGeometry().topLeft(); 
     event->accept(); 
    } 
} 

main.cpp

#include <QApplication> 
#include "MyWindow.h" 

int main(int argc, char *argv[]) { 
    QApplication app(argc, argv); 
    MyWindow* window = new MyWindow(0, Qt::FramelessWindowHint); 
    window->show(); 
    return app.exec(); 
} 

नमस्ते, एलेक्स

+0

मैंने Winwods Vista पर Qt 4.5.1 के साथ अपने नमूना कोड की कोशिश की और यह ठीक काम करता है, क्या आप गलत तरीके से वर्णन कर सकते हैं कि क्या गलत है (हजारों क्या?)। – gregseth

+1

मुझे लगता है कि "इसके हजारों" विंडो खंडों के एक बड़े हिस्से को संदर्भित करते हैं, यदि खिड़की के स्थानांतरित होने पर विंडो प्रबंधक ठीक से रीफ्रेश नहीं कर रहा है तो खिड़की प्रबंधक पीछे छोड़ सकता है। मेरे लिए, यह विंडो प्रबंधक के साथ एक समस्या की तरह लगता है, या संभवतः एक एम्बेडेड डिवाइस पर जो उच्च CPU लोड पर चल रहा है। –

+0

यह वही है जो मेरा मतलब है। लेकिन यह तभी होता है जब मैं फ़ायरफ़ॉक्स जैसे एनोटर एप्लिकेशन पर बेकार खिड़की को ड्रैग कर रहा हूं। डेस्कटॉप पर यह एक सामान्य व्यवहार है। सीपीयू-लोड सामान्य है, जीपीयू <5% – Alex

उत्तर

1

आप ख बुला करके देख सकते हैं आपके संरक्षित तरीकों में एएस वर्ग विधियों।

void MyWindow::paintEvent(QPaintEvent *event) // Painter 
{ 
    QWidget::paintEvent(event); 
    ... 
} 
void MyWindow::mouseMoveEvent(QMouseEvent *event) 
{ 
    QWidget::moveMouseEvent(event); 
    ... 
} 
0

मैं घटनाओं को फिर से रंगना संसाधित करने का प्रयास के बारे में आपकी समस्या (Ubuntu या XP), लेकिन कैसे पुन: पेश नहीं कर सका: उदाहरण के लिए:

if (event->buttons() & Qt::LeftButton) { 
    move(event->globalPos() - m_dragPosition); 
    event->accept(); 
    QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); 
} 

यह किया है कि आपके सिस्टम संसाधन या कम हो रही है हो सकता है आपके प्रदर्शन चालक "धीमा" है। इसे क्लीन रीबूट के साथ आज़माएं और केवल आपका ऐप खोलें।

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