您现在的位置是:首页 > 数码 > 

Qt画线条

2025-07-17 12:13:27
Qt画线条 转自:     情况是这样的,现在设计一个地图,地图上的点(假设为pushButton)在Qt Designer中进行勾勒,都放在一个frame里面,然后将一些地图上联通的点使用直线连接起来.嗯....其实这是图的基本演示.....如果你没看明白我在说什么,那就看下面的图吧 上面的线条有锯齿.....官方有个demo,看截图

Qt画线条

转自:

   

情况是这样的,现在设计一个地图,地图上的点(假设为pushButton)在Qt Designer中进行勾勒,都放在一个frame里面,然后将一些地图上联通的点使用直线连接起来.嗯....其实这是图的基本演示.....如果你没看明白我在说什么,那就看下面的图吧




上面的线条有锯齿.....官方有个demo,看截图



里面的线条十分优美....不过在下才疏学浅....还没吃透这个demo....先看看图1(就是在下弄的那个有锯齿的...)主要就是重载了paintEvent事件


首先,静态图是在designer里面勾勒的,就是没有直线的图(有人喜欢纯码代码来构建UI.....不过我属于比较懒的人.....就直接用designer了....)


在Qt Designer里面有一个和纯手工子类化大致相同的功能,叫提升...来看看怎么使用



重点在提升的类名称,和头文件

提升的类名称是自己将要子类化QFrame的类的名称,头文件是自己要编码的...不是自动生成的...........


我填的分别是Clandscape和promote.h


看看promote.h的内容


----------promote.h-----------------------------------------------

#include <QFrame>
#include <QPainter>
 
 
class sightSpot;
class Clandscape : public QFrame{
friend class Cmainwindow;
private:
    sightSpot *butt[5];
 
public:
    //ctructor and ~ctructor
    Clandscape(QWidget *para_parentWidget);
 
protected:
 
    void paintEvent(QPaintEvent *);
 
};
 
可以看到在protected里面对paintEvent进行了重载
在看里面对这个重载函数进行了定义
---------------------------------
#include promote.h
/*Clandscape*/
//ctructor
Clandscape::Clandscape(QWidget *para_parentWidget) : QFrame(para_parentWidget)
{
}
//overload paintEvent
void Clandscape::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    //1,2相距10
    painter.drawLine( QPointF(butt[0]->x()  (butt[0]->width() / 2),butt[0]->y()  (butt[0]->height() / 2)),QPointF(butt[1]->x()  (butt[1]->width() / 2),butt[1]->y()  (butt[1]->height() / 2)) );
    //1,相距50
    painter.drawLine( QPointF(butt[0]->x()  (butt[0]->width() / 2),butt[0]->y()  (butt[0]->height() / 2)),QPointF(butt[2]->x()  (butt[2]->width() / 2),butt[2]->y()  (butt[2]->height() / 2)) );
    //2,5相距5
    painter.drawLine( QPointF(butt[1]->x()  (butt[1]->width() / 2),butt[1]->y()  (butt[1]->height() / 2)),QPointF(butt[4]->x()  (butt[4]->width() / 2),butt[4]->y()  (butt[4]->height() / 2)) );
    //,5相距0
    painter.drawLine( QPointF(butt[2]->x()  (butt[2]->width() / 2),butt[2]->y()  (butt[2]->height() / 2)),QPointF(butt[4]->x()  (butt[4]->width() / 2),butt[4]->y()  (butt[4]->height() / 2)) );
    //,4相距20
    painter.drawLine( QPointF(butt[2]->x()  (butt[2]->width() / 2),butt[2]->y()  (butt[2]->height() / 2)),QPointF(butt[]->x()  (butt[]->width() / 2),butt[]->y()  (butt[]->height() / 2)) );
    //4,5相距25
    painter.drawLine( QPointF(butt[]->x()  (butt[]->width() / 2),butt[]->y()  (butt[]->height() / 2)),QPointF(butt[4]->x()  (butt[4]->width() / 2),butt[4]->y()  (butt[4]->height() / 2)) );
}
 
ok.....就这样完成了对paintEvent的重载....

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/794863.html

相关标签:无
上传时间: 2024-01-10 12:17:13
留言与评论(共有 20 条评论)
本站网友 中国两会
1分钟前 发表
地图上的点(假设为pushButton)在Qt Designer中进行勾勒
本站网友 boost库
11分钟前 发表
butt[1]->y()  (butt[1]->height() / 2))
本站网友 上海家化销售有限公司
13分钟前 发表
现在设计一个地图
本站网友 新版基药目录
12分钟前 发表
butt[0]->y()  (butt[0]->height() / 2))
本站网友 几夜大黑堂
29分钟前 发表
QPointF(butt[]->x()  (butt[]->width() / 2)
本站网友 时尚购物网
23分钟前 发表
butt[2]->y()  (butt[2]->height() / 2)) ); //2
本站网友 上海佘山月湖山庄
8分钟前 发表
sightSpot *butt[5]; public
本站网友 注射胶原蛋白隆鼻价格
29分钟前 发表
butt[2]->y()  (butt[2]->height() / 2))
本站网友 今日钢材价格行情
13分钟前 发表
butt[2]->y()  (butt[2]->height() / 2)) ); //2
本站网友 只得一生
10分钟前 发表
本站网友 减肥食谱大全
3分钟前 发表
本站网友 unity3d圣典
30分钟前 发表
butt[4]->y()  (butt[4]->height() / 2)) );} ok.....就这样完成了对paintEvent的重载....
本站网友 strictmode
19分钟前 发表
//ctructor and ~ctructor Clandscape(QWidget *para_parentWidget); protected
本站网友 驱动精灵2004
15分钟前 发表
就是没有直线的图(有人喜欢纯码代码来构建UI.....不过我属于比较懒的人.....就直接用designer了....) 在Qt Designer里面有一个和纯手工子类化大致相同的功能
本站网友 笨猪四国
15分钟前 发表
4相距20 painter.drawLine( QPointF(butt[2]->x()  (butt[2]->width() / 2)
本站网友 营养奶粉
24分钟前 发表
QPointF(butt[]->x()  (butt[]->width() / 2)
本站网友 电力局电话
22分钟前 发表
Qt画线条 转自:     情况是这样的
本站网友 鲶鱼吃什么
30分钟前 发表
5相距0 painter.drawLine( QPointF(butt[2]->x()  (butt[2]->width() / 2)
本站网友 教育是立国之本
7分钟前 发表
叫提升...来看看怎么使用 重点在提升的类名称