基于Qt秒表设计
这个只是虚拟机下的Dialog中设计的秒表,大家感兴趣的可以根据自己手机的秒表界面来设计,亦或是有别的想法也可以在ui中添加函数,或者是在ui界面自己添加调整。本篇将给除了给出Qt秒表设计例子之外还会为大家提供一些常用函数。
一、Qt绘图系统简介;
Qt的绘图系统允许使用相同的API在屏幕和其它打印设
备上进行绘制。整个绘图系统基于 QPainter,
QPainterDevice和QPaintEngine三个类。。
QPainter用来执行绘制的操作;QPaintDevice则允许
QPainter在其上面进行绘制,也就是QPainter工作的空间;
QPaintEngine提供了画笔(QPainter)在不同的设备上进行
绘制的统一的接口。
Qt 的绘图系统实际上是,使用 QPainter在
QPainterDevice上进行绘制,它们之间使用QPaintEngine进
行通讯(也就是翻译QPainter 的指令)。
二、QPainter类的绘图函数
drawPoint 点drawLine 线
drawRect 矩形drawPath 路径
drawArc 圆弧drawChord 弦
drawPie 扇形drawEllipse 椭圆
drawText 文字
drawRoundRect 圆角矩形
drawImage drawPixmap drawPicture 显示图像
drawPoints,drawLines,drawRects 多个点、多条线、多个矩形
三、几种常用函数效果图:
四、画刷和画笔
QBrush定义了QPainter的填充模式,具有样式、颜色、
渐变以及纹理等属性。画刷的style()定义了填充的样式,使
用Qt::BrushStyle枚举,默认值是Qt::NoBrush,也就是不进
行任何填充。
QPen定义了用于QPainter应该怎样画线或者轮廓线。画
笔具有样式、宽度、画刷、笔帽样式和连接样式等属性。画
笔的样式style()定义了线的样式。画笔宽度width()或widthF()
定义了画笔的宽。注意,不存在宽度为 0 的线,画笔宽度通
常至少是 1 像素。
声明画刷或画笔对象的时候,通常可以先指定颜色,然
后再通过类中的setStyle、setWidth等成员函数设置画刷或画
笔属性。
QPainter对象要使用画刷或画笔,通常是调用setBrush
和setPen成员函数,设置过画刷和画笔的状态将会一直保持。
五、图像处理
Qt提供了4个处理图像的类:QImage、QPixmap、
QBitmap,QPicture,它们有着各自的特点。
QImage优化了I/O操作,可以直接存取操作像素数据。
QPixmap优化了再屏幕上显示图像的性能。
QBitmap从QPixmap继承,只能表示黑白两种颜色。
QPicture是可以记录和重启QPrinter命令的类。
对最简单的图片显示而言,用QImage或QPixmap类比较
常见。显示一副图像,可以在paintEvent函数中如下操作:
QPainter painter(this); // 声明QPainter对象
… // 其他绘图操作
// 声明一个QPixmap对象并初始装载图像文件
QPixmap pm("/home/fish/HDU.png");
painter.drawPixmap((rect().width() - pm.width()) / 2,
(rect().height() - pm.height()) / 2, pm); // 居中显示图像
六、秒表设计例子
1、
.pro文件
#-------------------------------------------------
#
# Project created by QtCreator 2019-12-04T16:50:48
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = qt_clock
TEMPLATE = app
SOURCES += main.cpp\
dialog.cpp
HEADERS += dialog.h
FORMS += dialog.ui
2、头文件:
dialog.h代码;
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QTime>
#include <QMouseEvent>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private:
Ui::Dialog *ui;
int state;
int nMSCnt;
QTime sTime;
QList<int> lstCnt;
int idx;
QRect rcBottom;
QRect rcLeft;
QRect rcRight;
private slots:
void mytimer ( );
// QWidget interface
protected:
void paintEvent(QPaintEvent *);
// QWidget interface
protected:
void mousePressEvent(QMouseEvent *);
// QWidget interface
protected:
void wheelEvent(QWheelEvent *);
};
#endif // DIALOG_H
3、源文件
(1)dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QPainter>
#include <QTimer>
Dialog::Dialog(</