QT学习随记 (六)—— 自定义控件及事件

一、自定义控件

1、自定义控件封装

1、添加新文件->Qt->设计师界面类(.h .cpp .ui)

2、.ui->设计QSpinBox和QSlider两个控件

3、Widget中使用自定义控件,拖拽一个Widget,点击提升为,点击添加,点击提升

4、实现功能,改变数字,滑动条跟着移动,信号槽监听

5、提供getNum和setNum对外接口

6、测试接口

二、Qt中的事件

1、鼠标事件

鼠标进入事件 enterEvent

鼠标离开事件 leaveEvent

鼠标按下 mousePressEvent(QMouseEvent ev)

鼠标释放 mouseReleaseEvent

鼠标移动 mouseMoveEvent

ev->x() x坐标 ev->y() y坐标

ev->button()可以判断所有按键 Qt::LeftButton Qt::RightButton

ev->buttons()判断组合按键 判断move时的左右键 结合&操作符

格式化字符串方式 QString("%1  %2").arg(111).arg(222)

 2、定时器1

1、利用事件 timerEvent (QTimerEvent * ev)

2、启动定时器 startTimer(1000) 单位 毫秒

3、timerEvent的返回值是定时器的唯一标识 可以和ev->timerId作比较

    if(ev->timerId()==id1)
    {
        //每隔1秒加1
        static int num = 1;
        ui->label->setText(QString::number(num++));
    }

    if(ev->timerId()==id2)
    {
        //每隔2秒加1
        static int num2 = 1;
        ui->label_2->setText(QString::number(num2++));
    }
 2、定时器2

1、利用定时器类  QTimer

2、创建定时器对象   QTimer * timer = new QTimer(this)

3、启动定时器 timer->start(毫秒)

4、每隔一定毫秒,发送信号 timeout 进行监听

5、暂停 timer->stop(毫秒)

    QTimer * timer = new QTimer(this);
    //启动定时器
    timer->start(50);

    connect(timer,&QTimer::timeout,[=](){

        //每隔0.05秒加1
        static int num = 1;
        ui->label_3->setText(QString::number(num++));
        });
3、Event事件分发器

1、用于事件分发,也可以做操作拦截,但是不建议

2、bool event (QEvent * e);

3、返回值 如果是ture代表用户处理这个事件,不向下分发了

4、e->type() == 鼠标按下 ... 

4、事件过滤器

1、在程序将事件分发到事件分发器前 可以利用过滤器做拦截

2、  步骤1:安装事件过滤器

        步骤2:重写eventFilter函数(obj , ev)

三、QPainter绘图

1、QPainter绘图

1、绘图事件 void paintEvent()

2、声明一个画家对象 QPainter painter(this) this 指定绘图设备

3、画线、画圆、画矩形、画文字

4、设置画笔QPen 设置画笔宽度 风格

5、设置画刷QBrush 设置画刷风格

2、高级设置

1、抗锯齿 效率低 painter.setRenderHint(QPainter::Antialiasing);

2、对画家进行移动 painter.translate(100,0);

3、保存画家状态painter.save();

4、还原画家状态painter.restore();

5、如果想手动调用绘图事件 利用update

6、利用画家画图片 painter.drawPixmap( x , y , QPixmap(Spider))

3、QPaintDevice绘图设备

1、QPixmap QImage QBitmap(黑白色) QPicture QWidget

2、QPixmap对不同平台做了显示的优化

 ①   QPixmap pix(300,300)

 ②   pix.fill(填充颜色)

 ③   利用画家往Pix上画画 QPainter painter(& pix)

 ④   保存 pix.save("路径")

3、QImage对像素进行访问

 ①   使用和QPixmap差不多      QImage img(300,300,QImage::Format_RGB32);

 ②   其他流程和QPimax一样

 ③   可以对像素进行修改 img.setPixel(i,j,value)

4、QPicture 记录和重现 绘图指令

 ①   QPicture pic

 ②   painter.begin(&pic);

 ③   保存 pic.save(任意后缀名)

 ④   重现 利用画家可以重现painter.drawPicture(0,0,pic);

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值