1 自定义控件
1.1 添加新文件 Qt-设计师界面类 (.h .cpp .ui)
1.2 .ui 中 设计 QSpinBox 和 QSlider 两个控件
1.3 Widget 中使用自定义控件,拖拽一个 Widget,点击提升为,点击添加,点击提升
1.4 实现功能,改变数字,滑动条跟着移动,信号槽监听
1.5 提供 getNum 和 retNum 函数接口
2 Qt 中的事件
2.1 鼠标事件
2.1.1 鼠标进入事件 enterEvent
2.1.2 鼠标离开事件 leaveEvent
2.1.3 鼠标按下 mousePressEvent(QMouseEvent *ev)
2.1.4 鼠标释放 mouseReleaseEvent(QMouseEvent *ev)
2.1.5 鼠标移动 mouseMoveEvent(QMouseEvent *ev)
2.1.6 ev->x() x坐标 ev->y() y坐标
2.1.7 ev->button() 可以判断所有按键 Qt::LeftButton Qt::RightButton
2.1.8 ev->buttons() 判断组合按键 判断 move 时候的左右键 结合 &(位与) 操作符
2.1.9 格式化字符串 QString("%1 %2").arg(1).arg(2);
2.2 定时器1
2.2.1 利用事件 void timerEvent( QTimerEvent * ev )
2.2.2 启动定时器 startTimer(1000) 单位:毫秒
2.2.3 timerEvent 的返回值是定时器的表一标识,可以和 ev->timerId() 作比较
2.3 定时器2
2.3.1 利用定时器类 QTimer
2.3.2 创建定时器对象 QTimer * timer = new QTimer(this);
2.3.3 启动定时器 timer->start(毫秒);
2.3.4 每隔一定毫秒,发送信号 timerout ,进行监听
2.3.5 暂停 timer->stop();
2.4 event 事件
2.4.1 用途:用于事件的分发;
2.4.2 也可以做拦截操作,但是不建议
2.4.3 bool event( QEvent * e );
2.4.4 返回值,如果是 true 代表用户处理这个事件,不向下分发了
2.4.5 e->type() == 鼠标事件
2.5 事件过滤器
2.5.1 在程序将事件分发到事件分发器前,可以利用过滤器做拦截
2.5.2 步骤:
1、给空间安装事件过滤器
2、重写 eventFilter(QObject * obj, QEvent * e);
3 绘图
3.1 绘图事件 void paintEvent() 重写这个事件
3.2 实例化一个画家对象:QPainter painter(this); this:指定画图的设备,即(窗口)
3.3 画线、画圆、画矩形、画文字、
3.4 设置画笔 QPen 设置画笔宽度、风格
3.5 设置画刷(即填充) QBrush 设置画刷风格
4 QPainter 高级设置
4.1 抗锯齿 效率低
painter.setRenderHint(QPainter::Antialiasing);
4.2 画家进行移动
painter.translate(100, 0);
4.3 保存画家状态
painter.save();
4.4 还原画家状态
painter.restore();
4.5 如果像手动调用绘图事件,利用 update()
利用画家画图片: painter.drawPixmap(posX, 0, QPixmap(":/images/lufei.jpg"));
4 QPaintDevice
4.1 QPixmap QImage QBitmap(黑白色) QPicture QWidget
4.2 QPIxmap 对不同的平台做了显示的优化
4.2.1 QPixmap pix( 300, 300 );
4.2.2 pix.fill( Qt::blue ) 填充颜色
4.2.3 利用画家往 pix 上画画 QPainter painter(&pix)
4.2.4 保存 pix.save( "路径" )
4.3 QImage 可以对像素进行访问
4.3.1 使用和 QPixmap 差不多, QImage img(300, 300, QImage::Format_RGB32 );
4.3.2 其他流程和 QPixmap 一样
4.3.3 可以对像素进行修改 img.setPixel(i, j, value);
4.4 QPicture 记录和重现 绘图指令
4.4.1 QPicture pic;
4.4.2 painter.begin( &pic );
4.4.3 painter.end( &pic );
4.4.4 pic.save( 任意后缀名 );
4.4.5 重现 利用画家可以重现 painter.drawPicture( 0, 0, pic );