2011-08-19 77 views
-1

我想用我的Qt應用程序創建一個個性化的用戶界面。出於這個原因,我想編輯您可以在任何類型的窗口應用程序中看到的默認窗口框架。如何編輯Qt應用程序中的默認窗口標題和框架?

包含默認窗口標題和框架的應用: http://0000.2.img98.net/out.php/i12977_with-default-title-and-frame.jpg

該編輯窗口的標題和框架的應用: http://0000.2.img98.net/out.php/i12978_without-defualt-title-andframe.jpg

回答

4

你需要創建一個QWidget派生的新類,並通Qt::FramelessWindowHint參數QWidget構造,像這樣:

class MyWidget : public QWidget { 
public: 
MyWidget(QWidget* parent) : QWidget(parent, Qt::FramelessWindowHint) {...} 

前前後後呃它你需要重新實現QWidget::paintEvent (QPaintEvent * event)並繪製任何你想要的設計。

例如,您將主窗口設計爲PNG圖像。

class MyWidget : public QWidget { 
Q_OBJECT 
private: 
    QPushButton* button; 
    QLabel* label; 
    QComboBox* combobox; 
    QPixmap pixmap; 

public: 
    explicit MyWidget(QWidget *parent = 0) : QWidget(parent, Qt::FramelessWindowHint) { 

     // Create some controls 
     button = new QPushButton(); 
     label = new QLabel(); 
     combobox = new QComboBox(); 

     QVBoxLayout* l = new QVBoxLayout(); 
     l->addWidget(button); 
     l->addWidget(label); 
     l->addWidget(combobox); 
     setLayout(l); 

     resize (500, 500); 

     setAttribute(Qt::WA_TranslucentBackground); // enable translucent background 

     pixmap = QPixmap("./1.png"); // load design picture 
}; 

protected: 
    virtual void paintEvent (QPaintEvent* event) { 
     painter.setPen(Qt::NoPen); 
     painter.setBrush(QColor(0, 0, 0, 0)); 
     painter.drawRect(this->rect()); 
     painter.drawPixmap(this->rect(), pixmap, pixmap.rect()); 
}; 

因爲我們沒有看到一個標題欄,我們需要實現窗口拖動操作:

private: 
    bool pressed; 
    QPoint mousePressPoint; 

protected: 
    virtual void mousePressEvent (QMouseEvent * event) { 
     QWidget::mousePressEvent(event); 
     if (!pressed) { 
      pressed = true; 
      mousePressPoint = event->pos(); 
     } 
    } 

    virtual void mouseMoveEvent (QMouseEvent * event) { 
     QWidget::mouseMoveEvent(event); 
     if (pressed) {move(event->globalPos() - mousePressPoint);} 
    } 

    virtual void mouseReleaseEvent (QMouseEvent * event) { 
     QWidget::mouseReleaseEvent(event); 
     if (pressed) {pressed = false;} 
    } 
+0

是否有可能爲你寫的樣品完全類爲我的細節? –

+0

非常感謝。 –

相關問題