QT界面快速上手

在这里插入图片描述

.ui
QT界面设计项目中的.ui 文件可以直观感受到界面设计。

.h
Q_OBJECT 是Qt中定义的宏,只有直接或间接继承 QObject 类才可以使用,只有使用了该宏才具有信号槽机制。所创建类继承自 QMainWindow,而 QMainWindow 继承自 QWidget 即间接继承了 QObject,所有我们才能定义槽函数(Slot)。

.cpp

  1. 在这文件中我们实现绑定(connect)信号(Signal),实现一些菜单或者按钮的逻辑联动。       
    //connect函数使用:
    connect(const QtPrivate::FunctionPoint);
    //包含五个参数
  2. Qpinter类顾名思义用来绘制。一般使用步骤如下(只记录思路,没有涉及编译):
  3. 对于绘图事件,只需要在相应的位置进行重写即可。(如果不对paintEvent重写,其实现为空),不需要主动调用,Qt事件循环会自动处理绘图事件,并根据重写的内容做出响应。
    //QWidget中的paintEvent事件处理器可以在子类中被重写来接收绘图事件
    /*Widget子类.h */
    // 在头文件中声明
    void paintEvent(QPaintEvent *event);
    
    /*main.cpp*/
    void main()
    {
      //1. 构造
    }
    
    /*Widget子类.cpp*/
    //在源文件中重写
    void Widget::paintEvent(QPaintEvent *event)
    {
        // 实例化画家对象,this指定的是绘图设备
        QPainter painter(this);
    }
    
     

    update()会使窗口重绘图像,但是如果数据量太大,每次刷新的时候都重绘,就很浪费时间。

    Q:如何不重绘,接着上回的内容继续绘画?
    A:修改窗口属性。

    方法1:
    Qt::WA_OpaquePaintEvent
    Qt通常在调用paintEvent()之前擦除控件区域。如果设置了Qt::WA_OpaquePaintEvent属性,控件用不透明的颜色绘制其所有像素。
     

     w.setAttribute(Qt::WA_OpaquePaintEvent);
    
    w.update();  
    w.repaint(); 
    

    方法2
    Qt::WA_NoSystemBackground
    表明当前widget没有背景,即,当前widget接收到paint事件时背景不会自动重绘。

    Q: 分别窗口属性设置为以上两种,多次调用update() / repaint()通常只会导致一次paintEvent()调用,如果不重绘,多次调用update,是否需要考虑会漏掉某些绘画内容?
    A: 分别窗口属性设置为以上两种,多次调用update() / repaint()测试,发现没有丢数据,但是绘制过程中修改窗口大小还是会丢掉之前内容,移动窗口不会丢失。绘制背景是黑色。

    Q: 画一个叠加的两色图像,为什么看起来没有居中?
    A: 可能是pen.setWidth(int widthh) 设置线宽搞的鬼,一般先设置1,看看效果,如果线宽大于1,要注意drawPoint/ drawLine实际占的像素数量,做相应偏移。
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值