QT自定义窗口:

来源:互联网 发布:webstorm js代码提示 编辑:程序博客网 时间:2024/04/30 10:36

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上调了下窗口大小 ,加了两个按钮,意思意思,一切从简,只为表达思想 :-)

原创粉丝点击