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