QT自定義窗口:

QT自定義窗口:

New file--->qt--->qt designer form class--->widget 創建一個乾淨的vvwidget  .ui .h .cpp

該窗口支持拖動,透明,效果如圖:

 

圖片

 

/////////////////////////////// vvwidget.h ///////////////////////////////////

#ifndef VVWIDGET_H

#define VVWIDGET_H

#include <QWidget>

#include <QPoint>

#include <QPainter>

#include <QMouseEvent>

#include <QKeyEvent>

namespace Ui {

   class vvwidget;

}

class vvwidget : public QWidget

{

   Q_OBJECT

public:

   explicit vvwidget(QWidget *parent = 0);

   ~vvwidget();

protected:

   void keyPressEvent ( QKeyEvent * event );

   void mousePressEvent(QMouseEvent *event);

   void mouseMoveEvent(QMouseEvent *event);

   void paintEvent( QPaintEvent* );

private:

   Ui::vvwidget *ui;

   QPoint dragPosition;

};

#endif // VVWIDGET_H

/////////////////////////////////// vvwidget.cpp //////////////////////////////

#include "vvwidget.h"

#include "ui_vvwidget.h"

vvwidget::vvwidget(QWidget *parent) :

   QWidget(parent),

   ui(new Ui::vvwidget)

{

   ui->setupUi(this);

   setWindowFlags(Qt::FramelessWindowHint);

   setAttribute(Qt::WA_TranslucentBackground, true);

}

vvwidget::~vvwidget()

{

   delete ui;

}

void vvwidget::mousePressEvent(QMouseEvent *event)

{

  if (event->button() == Qt::LeftButton) {

      dragPosition = event->globalPos()-pos();

  }

}

void vvwidget::mouseMoveEvent(QMouseEvent *event)

{

  if (event->buttons() & Qt::LeftButton) {

      move(event->globalPos()-dragPosition);

  }

}

void vvwidget::keyPressEvent(QKeyEvent *event)

{

   if(event->key()==Qt::Key_Escape){

      close();

   }

}

void vvwidget::paintEvent( QPaintEvent* )

{

    QPainter p(this);

   p.drawPixmap(rect(),QPixmap(":/images/vb.png"));

}

這張vb.png 是我從<<熱血傳奇>>中提取出來的對話框背景,並在左上角摳了個透明區域。

在ui上調了下窗口大小 ,加了兩個按鈕,意思意思,一切從簡,只爲表達思想 :-)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章