Qt自绘窗体

也许大部分情况下我们不需要自己手动绘制一个窗体,大部分可以通过图片来实现,本篇仅以学习的态度来初略的理解Qt界面的自定义绘制功能。

 

本篇将实现以下功能:

1、绘制一个椭圆形

2、支持界面的移动操作

3、Esc退出

头文件:

  1: #include <QDialog>

  2: 

  3: class DrawDialog : public QDialog

  4: {

  5:     Q_OBJECT

  6: 

  7: public:

  8:     explicit DrawDialog(QWidget *parent = 0);

  9:     void mousePressEvent(QMouseEvent *event);

 10:     void mouseMoveEvent(QMouseEvent *event);

 11:     void paintEvent(QPaintEvent *event) ;

 12:     void keyPressEvent( QKeyEvent * event );

 13: private:

 14:     QPoint m_CurrentPos;

 15: };

 

实现:

  1: DrawDialog::DrawDialog(QWidget *parent) :

  2:     QDialog(parent)

  3: {

  4:     //让程序无边框

  5:     setWindowFlags( Qt::FramelessWindowHint );

  6:     //让程序背景透明

  7:     setAttribute(Qt::WA_TranslucentBackground, true);

  8: }

  9: 

 10: void DrawDialog::mousePressEvent(QMouseEvent *event)

 11: {

 12:     //当鼠标左键按下时,记录当前位置

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

 14:     {

 15:         m_CurrentPos = event->globalPos() - frameGeometry().topLeft();

 16:         event->accept();

 17:     }

 18:     QDialog::mousePressEvent(event);

 19: }

 20: void DrawDialog::mouseMoveEvent(QMouseEvent *event)

 21: {

 22:     //支持窗体移动

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

 24:     {

 25:         move(event->globalPos() - m_CurrentPos);

 26:         event->accept();

 27:     }

 28:     QDialog::mouseMoveEvent(event);

 29: }

 30: 

 31: //绘制图形

 32: void DrawDialog::paintEvent(QPaintEvent *event)

 33: {

 34:     QPainter painter(this);

 35:     //反走样

 36:     painter.setRenderHint(QPainter::Antialiasing,true);

 37: 

 38:     painter.setPen( QPen(Qt::black, 2) );

 39:     painter.setBrush( Qt::black );

 40:     QRect rect(10,10,200,260);

 41:     //绘制一个鸭蛋

 42:     painter.drawEllipse(rect);

 43: }

 44: 

 45:  void DrawDialog::keyPressEvent( QKeyEvent * event )

 46:  {

 47:      //按下esc键时,关闭

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

 49:      {

 50:          close();

 51:      }

 52:  }

 

 

图片效果(背景是我的桌面)

image

你可能感兴趣的:(qt)