移动端网站建设服务商,嵌入式软件开发学习路线,企业统一登录平台,石家庄网站建设套关于Qt
Qt是一个跨平台的C图形用户界面应用程序框架#xff0c;通过使用Qt#xff0c;可以快速开发出跨平台的多平台应用程序#xff0c;包括Windows、Mac OS X、Linux和其他Unix系统。Qt提供了强大的图形操作界面#xff08;GUI#xff09;程序开发和移植的能力#xf…关于Qt
Qt是一个跨平台的C图形用户界面应用程序框架通过使用Qt可以快速开发出跨平台的多平台应用程序包括Windows、Mac OS X、Linux和其他Unix系统。Qt提供了强大的图形操作界面GUI程序开发和移植的能力以及对网络、数据库和其他技术的支持能够满足多平台应用程序的需求。
用Qt画一个仪表盘
可以使用Qt的QPainter类来绘制仪表盘主要的步骤如下
创建一个QWidget类的实例并给它一个合适的大小在QWidget的paintEvent()函数中创建QPainter实例并设置其属性确定仪表盘的中心点和外围矩形并使用 QPainter.drawEllipse()绘制外围圆环使用QPainter.drawLine()绘制指针指针的位置可以使用QPainter.rotate()方法来计算使用QPainter.drawText()绘制文字文字的位置可以使用QPainter.rotate()方法来计算使用QPainter.drawArc()绘制刻度环使用QPainter.drawText()绘制刻度文字使用 QPainter.drawText()绘制标题文字校正指针和文字使用QPainter.end()结束绘制
示例1如下void Widget::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);// 绘制外圆painter.setPen(Qt::NoPen);painter.setBrush(Qt::white);painter.drawEllipse(rect());// 绘制分隔线int step 30;painter.setPen(Qt::black);for (int i 0; i 360; i step) {painter.drawLine(rect().center(), pointOnCircle(rect().center(), rect().width() / 2, i));}// 绘制指针painter.setPen(Qt::NoPen);painter.setBrush(Qt::red);painter.drawConvexPolygon(m_pointer, 3);
}示例2如下void Widget::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);// 设置画笔QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.translate(width() / 2, height() /2); // 将坐标原点移动到中心点// 绘制仪表盘背景int radius qMin(width(), height()) / 2; // 半径painter.drawEllipse(-radius, -radius, 2 * radius, 2 * radius);// 绘制仪表盘指针painter.rotate(m_value * 360.0 / m_maxValue);QPen pen;pen.setWidth(radius / 10);pen.setColor(Qt::black);painter.setPen(pen);painter.drawLine(0, 0, 0, -radius);
}示例3如下void Widget::paintEvent(QPaintEvent *event)
{Q_UNUSED(event)int width this-width();int height this-height();int side qMin(width, height);// 画背景QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.translate(width / 2, height / 2);painter.scale(side / 200.0, side / 200.0);painter.setPen(Qt::NoPen);// 画背景painter.setBrush(Qt::white);painter.drawEllipse(-100, -100, 200, 200);// 画刻度线painter.setPen(QPen(Qt::black, 1));int n 12;for (int i 0; i n; i) {painter.drawLine(0, -90, 0, -96);painter.rotate(360.0 / n);}// 画数字painter.setPen(Qt::black);painter.setFont(QFont(Arial, 10));for (int i 0; i n; i) {int value i * 30;QString str QString(%1).arg(value);QRectF textRect(-20, -96, 40, 16);painter.drawText(textRect, Qt::AlignCenter, str);painter.rotate(360.0 / n);}// 画指针painter.setBrush(Qt::red);painter.save();painter.rotate(m_value);painter.drawConvexPolygon(m_points, 3);painter.restore();
}示例4如下// 绘制仪表盘
void Widget::paintEvent(QPaintEvent* event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing); // 抗锯齿painter.translate(width() / 2, height() / 2); // 坐标系原点移动到界面中心int side qMin(width(), height());painter.scale(side / 200.0, side / 200.0); // 缩放坐标系// 绘制外圆painter.setPen(QPen(Qt::black, 3));painter.setBrush(Qt::white);painter.drawEllipse(-100, -100, 200, 200);// 绘制刻度painter.setPen(QPen(Qt::black, 2));for (int i 0; i 360; i) {if (i % 30 0) {painter.drawLine(0, -90, 0, -80);painter.drawText(-5, -70, QString::number(i / 30));} else {painter.drawLine(0, -95, 0, -80);}painter.rotate(1.0); // 旋转坐标系}// 绘制指针painter.setPen(QPen(Qt::red, 2));painter.drawLine(0, 0, 0, -60);painter.setPen(QPen(Qt::darkRed, 3));painter.drawLine(0, 0, 0, -70);
}