找回密码
 立即注册
收起左侧

关于在ltabWidget的abel上画图

8
回复
7138
查看
[复制链接]
累计签到:132 天
连续签到:1 天
来源: 2015-9-17 14:48:46 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 adaluobo 于 2015-9-17 14:50 编辑

我在tabWidget的tab1里有一个label,想在label上画一个直角坐标系,横坐标是点,纵坐标是当前点与它前一个点的时间差。
我想用事件过滤器来实现,但是我现在连一条线都画不上去....
这是我画一条线的程序:
bool Widget::eventFilter(QObject *obj, QEvent *event)
{   
           if(obj == ui->label)   
              {
                   if(event->type() == QEvent::Paint)      
                     {   
                              QPainter painter(ui->label);                   
                             painter.setPen(QPen(Qt::red,11));         
                             painter.drawLine(QPoint(20,411),QPoint(20,200));
                     }
             }
}
求大神解答啊,很着急T T

最佳答案

查看完整内容

用QT的自带的serialport模块,可以使用readready()信号去关联对串口的槽函数!这样的话,在槽函数里打印下时间,就知道每次数据到来的时间了,,不就是你想要的吗?(时间要精确一些),,,qDebug()
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2015-9-17 14:48:47 显示全部楼层
adaluobo 发表于 2015-9-17 16:23
我的是5.3.2,请问怎么实现啊

用QT的自带的serialport模块,可以使用readready()信号去关联对串口的槽函数!这样的话,在槽函数里打印下时间,就知道每次数据到来的时间了,,不就是你想要的吗?(时间要精确一些),,,qDebug()<<QTime::currentTime().toString("ss:zzz");这样大概能满足了,,如果精确度还不够,你就看看看Qtime类,,找找吧
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2015-9-17 14:57:50 显示全部楼层
你在执行if里打印一下,看看画图的那句到底有没有执行?另外,画图的程序能这么写吗?画图我为画的少,但是,据我所知,qt画图的代码都要放到paintEvent里面去,然后在合适的地方调用update啊!
回复

使用道具 举报

累计签到:132 天
连续签到:1 天
2015-9-17 14:59:58 显示全部楼层
qq1043068972 发表于 2015-9-17 14:57
你在执行if里打印一下,看看画图的那句到底有没有执行?另外,画图的程序能这么写吗?画图我为画的少,但是 ...

if(event->type() == QEvent: aint)  
这一句不就定义了event是paint类型么
回复

使用道具 举报

累计签到:132 天
连续签到:1 天
2015-9-17 15:12:22 显示全部楼层
qq1043068972 发表于 2015-9-17 14:57
你在执行if里打印一下,看看画图的那句到底有没有执行?另外,画图的程序能这么写吗?画图我为画的少,但是 ...

是我忘记在构造函数里加ui->label->installEventFilter(this);这句话了= =
我想问一个问题,怎么能获得串口发给我的两个点之间的时间差啊

点评

你用的qt几?如果是qt5的话,这个功能好实现!不是qt5,就得费点事了  详情 回复 发表于 2015-9-17 16:16
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2015-9-17 16:16:28 显示全部楼层
adaluobo 发表于 2015-9-17 15:12
是我忘记在构造函数里加ui->label->installEventFilter(this);这句话了= =
我想问一个问题,怎么能获得串 ...

你用的qt几?如果是qt5的话,这个功能好实现!不是qt5,就得费点事了
回复

使用道具 举报

累计签到:132 天
连续签到:1 天
2015-9-17 16:23:06 显示全部楼层
qq1043068972 发表于 2015-9-17 16:16
你用的qt几?如果是qt5的话,这个功能好实现!不是qt5,就得费点事了

我的是5.3.2,请问怎么实现啊

点评

用QT的自带的serialport模块,可以使用readready()信号去关联对串口的槽函数!这样的话,在槽函数里打印下时间,就知道每次数据到来的时间了,,不就是你想要的吗?(时间要精确一些),,,qDebug()  详情 回复 发表于 2015-9-17 16:43
回复

使用道具 举报

累计签到:132 天
连续签到:1 天
2015-9-18 08:39:26 显示全部楼层
qq1043068972 发表于 2015-9-17 16:43
用QT的自带的serialport模块,可以使用readready()信号去关联对串口的槽函数!这样的话,在槽函数里打印下时 ...

谢谢啦~我还想问一下,我想点击一个按钮然后new一个label显示出来,但是在按钮的clicked槽里创建label显示不出来,应该怎样实现啊?

点评

你是直接在槽函数里声明,接着new的吧?这样槽函数执行完了就结束了,而且不指明父类,还会造成内存泄露,, 你在槽函数里这么写: QLabel *lab = new QLabel("nihao",this); lab->show(); 就行了,,这样lab就会显示到ui上  详情 回复 发表于 2015-9-18 17:45
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2015-9-18 17:45:19 显示全部楼层
adaluobo 发表于 2015-9-18 08:39
谢谢啦~我还想问一下,我想点击一个按钮然后new一个label显示出来,但是在按钮的clicked槽里创建label显 ...

你是直接在槽函数里声明,接着new的吧?这样槽函数执行完了就结束了,而且不指明父类,还会造成内存泄露,,
你在槽函数里这么写:
QLabel *lab = new QLabel("nihao",this);
  lab->show();
就行了,,这样lab就会显示到ui上,,只不过位置不对,你自己设置下位置
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了