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

qchart绘图

5
回复
10731
查看
[复制链接]
累计签到:3 天
连续签到:1 天
来源: 2017-1-14 11:41:41 显示全部楼层 |阅读模式
5Qter豆
本帖最后由 liangzhenjie 于 2017-1-14 11:43 编辑

我用了qt例子中的audio这个例子看qchart,我打算用同样的数据同时绘制两个图表出来,但是我改完以后运行就卡死,半天没反应,代码如下
    m_chart = new QChart;   
QChartView *chartView = new QChartView(m_chart);   
chartView->setMinimumSize(800, 600);   
m_series = new QLineSeries;   
m_chart->addSeries(m_series);   
QValueAxis *axisX = new QValueAxis;   
axisX->setRange(0, 2000);   
axisX->setLabelFormat("%g");   
axisX->setTitleText("Samples");   
QValueAxis *axisY = new QValueAxis;   
axisY->setRange(-1, 1);   
axisY->setTitleText("Audio level");   
m_chart->setAxisX(axisX, m_series);   
m_chart->setAxisY(axisY, m_series);   
m_chart->legend()->hide();   
m_chart->setTitle("Data from the microphone");
    QChart * m_chart1 = new QChart;   
QChartView *chartView1 = new QChartView(m_chart1);   
chartView1->setMinimumSize(800, 600);   
m_series1 = new QLineSeries;   
m_chart1->addSeries(m_series1);    QValueAxis *axisX1 = new QValueAxis;   
axisX1->setRange(0, 2000);   
axisX1->setLabelFormat("%g");   
axisX1->setTitleText("Samples2");   
QValueAxis *axisY1 = new QValueAxis;   
axisY1->setRange(-1, 1);   
axisY1->setTitleText("Audio level2");   
m_chart1->setAxisX(axisX1, m_series1);   
m_chart1->setAxisY(axisY1, m_series1);   
m_chart1->legend()->hide();   
m_chart1->setTitle("Data from the microphone2");
    QVBoxLayout *mainLayout = new QVBoxLayout;   
mainLayout->addWidget(chartView);   
mainLayout->addWidget(chartView1);   
m_pLabel = new QLabel();   
mainLayout->addWidget(m_pLabel);   
setLayout(mainLayout);
    QAudioFormat formatAudio;   
formatAudio.setSampleRate(18000);   
formatAudio.setChannelCount(1);   
formatAudio.setSampleSize(8);   
formatAudio.setCodec("audio/pcm");    formatAudio.setByteOrder(QAudioFormat::LittleEndian);   
formatAudio.setSampleType(QAudioFormat::UnSignedInt);
    QAudioDeviceInfo inputDevices = QAudioDeviceInfo::defaultInputDevice();   
m_audioInput = new QAudioInput(inputDevices,formatAudio, this);
    m_device = new XYSeriesIODevice(m_series, this);   
m_device->open(QIODevice::WriteOnly);   
m_device->AddSeries(m_series1);    m_audioInput->start(m_device);
变量后面有1的都是我自己新添加的,iodevice那里我也改了一下
QVector<QPointF> points2 = points;   
m_series->replace(points);   
m_series1->replace(points2);
为什么就会卡死呢,如果把audio的SampleRate降得很低,就能看到慢慢动,现在这么高就完全卡死一样,这跟绘制的机制有什么联系吗,我现在需要类似的功能实现,大神闷帮忙解决下啊!!困扰好久了

最佳答案

查看完整内容

你看那个QML中chart的例子,可以绘制多个的
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2017-1-14 11:41:42 显示全部楼层
liangzhenjie 发表于 2017-1-18 14:15
我用c++接口绘制一个的时候效果也可以的,就是同时绘制两个就卡了,你试过同时显示多个的情况吗? ...

你看那个QML中chart的例子,可以绘制多个的
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2017-1-17 20:22:31 显示全部楼层
可以用QML中的Chart绘图,我用了效果很好。C++接口的不是太清楚,所以不大懂。但是现在用QML发现,无法发布,当然肯定是我的问题,现在还在研究。
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2017-1-18 14:15:41 显示全部楼层
adadadda 发表于 2017-1-17 20:22
可以用QML中的Chart绘图,我用了效果很好。C++接口的不是太清楚,所以不大懂。但是现在用QML发现,无法发布 ...

我用c++接口绘制一个的时候效果也可以的,就是同时绘制两个就卡了,你试过同时显示多个的情况吗?
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2017-1-19 10:39:41 显示全部楼层
adadadda 发表于 2017-1-18 18:22
你看那个QML中chart的例子,可以绘制多个的

能告知下具体时候哪个例子吗?我这也是在慢慢学qt呢,很多地方不懂。
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2017-1-19 10:52:48 显示全部楼层
adadadda 发表于 2017-1-14 11:41
你看那个QML中chart的例子,可以绘制多个的

多谢啦,我又找了一遍例子,发现有个例子是用setUseOpenGl加速就可以啦
回复

使用道具 举报

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

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