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

改造qwt例子simpleplot时遇到的问题

9
回复
10608
查看
[复制链接]
累计签到:8 天
连续签到:1 天
来源: 2014-5-2 14:46:59 显示全部楼层 |阅读模式
5Qter豆
本帖最后由 Syylc120317 于 2014-5-2 17:51 编辑

老师让做一个电路频率测试的上位机,要具有串口通信和显示波形的功能。这些天了解了下qwt遇到一些比较初级的问题,还请大家不吝赐教。
我想通过mainwindow里的一个pushbutton来控制,点击pushbutton之后显示一个QwtPlot
我把qwt例子里面现成的代码写到了pushbutton的槽函数里,如下
void MainWindow::on_pushButton_clicked(){
    QwtPlot plot;
    plot.setTitle( "Plot Demo" );
    plot.setCanvasBackground( Qt::white );
    plot.setAxisScale( QwtPlot::yLeft, 0.0, 10.0 );
    plot.insertLegend( new QwtLegend() );
    QwtPlotGrid *grid = new QwtPlotGrid();
    grid->attach( &plot );
    QwtPlotCurve *curve = new QwtPlotCurve();
    curve->setTitle( "Some Points" );
    curve->setPen( Qt::blue, 4 ),
    curve->setRenderHint( QwtPlotItem::RenderAntialiased, true );
    QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse, QBrush( Qt::yellow ), QPen( Qt::red, 2 ), QSize( 8, 8 ) );
    curve->setSymbol( symbol );
    QPolygonF points;
    points << QPointF( 0.0, 4.4 ) << QPointF( 1.0, 3.0 )<< QPointF( 2.0, 4.5 ) << QPointF( 3.0, 6.8 )  << QPointF( 4.0, 7.9 ) <<     QPointF( 5.0, 7.1 );
    curve->setSamples( points );
    curve->attach( &plot );
    plot.resize( 600, 400 );
    plot.show();
}
运行起来发现点击pushbutton之后plot一闪就消失了,求问解决办法
另外我希望能在点击pushbutton之后出现一个dialog,让plot在这个dialog里面显示出来,不知如何实现?

最佳答案

查看完整内容

嗯,我想起来了解决方案了,你在头文件中申明成员变量QwtPlot plot; 然后把原来地方QwtPlot plot;注释掉,然后应该就可以用了。
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-2 14:47:00 显示全部楼层
嗯,我想起来了解决方案了,你在头文件中申明成员变量QwtPlot plot;
然后把原来地方QwtPlot plot;注释掉,然后应该就可以用了。
参与人数 1人气 +2 收起 理由
allendigua + 2 必须支持!

查看全部评分总评分 : 人气 +2

回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-2 17:54:36 显示全部楼层
我帮你编辑了一下帖子。我还没有用过QWT。
不过我觉得,你这个plot应该在堆上创建,而不是在栈上创建。
简单的说就是QwtPlot plot;这句应该改为QwtPlot *plot = new QwtPlot();
你试一下吧。
回复

使用道具 举报

累计签到:8 天
连续签到:1 天
2014-5-2 18:43:37 显示全部楼层
Syylc120317 发表于 2014-5-2 17:54
我帮你编辑了一下帖子。我还没有用过QWT。
不过我觉得,你这个plot应该在堆上创建,而不是在栈上创建。
简 ...

多谢编辑~
这句之前我也试过!会报错,例如:
request for member 'setTitle' in 'plot', which is of non-class type 'QwtPlot*'
request for member 'insertLegend' in 'plot', which is of non-class type 'QwtPlot*'
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-2 19:45:57 显示全部楼层
allendigua 发表于 2014-5-2 18:43
多谢编辑~
这句之前我也试过!会报错,例如:
request for member 'setTitle' in 'plot', which is of non ...

不客气。
你把报错的部分注释掉,再运行试试。
回复

使用道具 举报

累计签到:8 天
连续签到:1 天
2014-5-2 19:54:01 显示全部楼层
本帖最后由 allendigua 于 2014-5-2 19:56 编辑
Syylc120317 发表于 2014-5-2 19:45
不客气。
你把报错的部分注释掉,再运行试试。

因为plot.show()这句也是报错的。。注释掉就啥也不显示啦

原始的例子就是这样的,运行没问题~
int main( int argc, char **argv )
{
    QApplication a( argc, argv );
    QwtPlot plot;
    plot.setTitle( "lot Demo" );
    plot.setCanvasBackground( Qt::white );
    plot.setAxisScale( QwtPlot::yLeft, 0.0, 10.0 );
    plot.insertLegend( new QwtLegend() );
    QwtPlotGrid *grid = new QwtPlotGrid();
    grid->attach( &plot );
    QwtPlotCurve *curve = new QwtPlotCurve();
    curve->setTitle( "Some Points" );
    curve->setPen( Qt::blue, 4 ),
    curve->setRenderHint( QwtPlotItem::RenderAntialiased, true );
    QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse,
        QBrush( Qt::yellow ), QPen( Qt::red, 2 ), QSize( 8, 8 ) );
    curve->setSymbol( symbol );
    QPolygonF points;
    points << QPointF( 0.0, 4.4 ) << QPointF( 1.0, 3.0 )
        << QPointF( 2.0, 4.5 ) << QPointF( 3.0, 6.8 )
        << QPointF( 4.0, 7.9 ) << QPointF( 5.0, 7.1 );
    curve->setSamples( points );
    curve->attach( &plot );
    plot.resize( 600, 400 );
    plot.show();
    return a.exec();
}

回复

使用道具 举报

累计签到:8 天
连续签到:1 天
2014-5-2 20:36:48 显示全部楼层
Syylc120317 发表于 2014-5-2 20:00
嗯,我想起来了解决方案了,你在头文件中申明成员变量QwtPlot plot;
然后把原来地方QwtPlot plot;注释掉, ...

问题基本解决!就是设置y轴还有 grid(网格)貌似无效,没显示出来,目测也得在
头文件声明成员变量~
多谢!
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-2 21:07:24 显示全部楼层
allendigua 发表于 2014-5-2 20:36
问题基本解决!就是设置y轴还有 grid(网格)貌似无效,没显示出来,目测也得在
头文件声明成员变量~
多 ...

嗯,不客气。
这其实是栈上创建和堆上创建的问题。
这是个小问题,记住就行了。
栈上创建必须先声明为成员变量,而堆上创建没有这个要求,直接new一个就行。

点评

判断堆上或者是栈上的情况是怎么样的?如何判断、  详情 回复 发表于 2015-8-12 10:37
回复

使用道具 举报

尚未签到

2014-8-14 15:55:25 显示全部楼层
楼组把问题解决了没,可以把你的源码给我让我参考下吗
回复

使用道具 举报

累计签到:256 天
连续签到:1 天
2015-8-12 10:37:07 显示全部楼层
Syylc120317 发表于 2014-5-2 21:07
嗯,不客气。
这其实是栈上创建和堆上创建的问题。
这是个小问题,记住就行了。

判断堆上或者是栈上的情况是怎么样的?如何判断、
回复

使用道具 举报

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

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