zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    How to make BBED(Oracle Block Brower and EDitor Tool) on Unix/Linux/Windows
    直接路径读取对于延迟块清除的影响
    Mysql:日志管理:一般查询日志、慢速查询日志的
    Mysql:函数之二: miscellaneous functions
    Mysql:函数之三: date and time functions:重要的格式化函数
    Mysql:日志管理:综述
    Mysql:函数之三: date and time functions
    程序员阿BEN的SOHO生活
    网页常用Javascript
    优秀程序员的十个习惯
  • 原文地址:https://www.cnblogs.com/lingluotianya/p/4427225.html
Copyright © 2011-2022 走看看