我有一個0001.txt檔案,里面的第一列是x軸的坐標,第二列是y軸的坐標,第三列是對應的點上的電場值的大小,想請教大神如何用qcpcolormap下的相關函式取將這個txt檔案中的資料繪制成顏色圖呢?相當于將每個坐標下的電場值用不同的顏色來表示
txt檔案內的內容大致是下面這種格式(上傳不了附件,所以手動敲出來)
3 3 12
2 3 7.5
1 3 4.3
3 2 15
2 2 2.3
1 2 3.6
3 1 14
2 1 8.5
1 1 5.2
uj5u.com熱心網友回復:
哥們還是我來回答你,我做過類似的
核心代碼如下
QString fileName = QString(":/file/data%1.txt").arg(qrand() % 3);
QFile file(fileName);
if (file.open(QFile::ReadOnly | QIODevice::Text)) {
QString data = QLatin1String(file.readAll());
file.close();
QVector<double> keys, values;
QStringList list = data.split(" ");
int len = list.length();
//如果不是2的倍數則長度要減去1
if (len % 2 != 0) {
len = (len - 1);
}
for (int i = 0; i < len / 2; i++) {
keys.append(i);
}
//每兩個16進制數字組合成一個數字
for (int i = 0; i < len; i = i + 2) {
qint16 value = API::strHexToShort(QString("%1%2").arg(list.at(i)).arg(list.at(i + 1)));
values.append(value);
}
ui->customPlot9->setDataLine(0, "角度值", keys, values, true);
ui->customPlot9->replot();
}
uj5u.com熱心網友回復:
參考 1 樓 feiyangqingyun 的回復: 哥們還是我來回答你,我做過類似的
核心代碼如下
QString fileName = QString(":/file/data%1.txt").arg(qrand() % 3);
QFile file(fileName);
if (file.open(QFile::ReadOnly | QIODevice::Text)) {
QString data = QLatin1String(file.readAll());
file.close();
QVector<double> keys, values;
QStringList list = data.split(" ");
int len = list.length();
//如果不是2的倍數則長度要減去1
if (len % 2 != 0) {
len = (len - 1);
}
for (int i = 0; i < len / 2; i++) {
keys.append(i);
}
//每兩個16進制數字組合成一個數字
for (int i = 0; i < len; i = i + 2) {
qint16 value = API::strHexToShort(QString("%1%2").arg(list.at(i)).arg(list.at(i + 1)));
values.append(value);
}
ui->customPlot9->setDataLine(0, "角度值", keys, values, true);
ui->customPlot9->replot();
}
大神你好,能不能解釋一下這段代碼的大致思路呢,為什么要把每兩個16進制數字組合成一個數字呀,還有setdataline函式是什么意思呢,感覺最后只能畫出一個函式曲線圖呀
uj5u.com熱心網友回復:
參考 1 樓 feiyangqingyun 的回復: 哥們還是我來回答你,我做過類似的
核心代碼如下
QString fileName = QString(":/file/data%1.txt").arg(qrand() % 3);
QFile file(fileName);
if (file.open(QFile::ReadOnly | QIODevice::Text)) {
QString data = QLatin1String(file.readAll());
file.close();
QVector<double> keys, values;
QStringList list = data.split(" ");
int len = list.length();
//如果不是2的倍數則長度要減去1
if (len % 2 != 0) {
len = (len - 1);
}
for (int i = 0; i < len / 2; i++) {
keys.append(i);
}
//每兩個16進制數字組合成一個數字
for (int i = 0; i < len; i = i + 2) {
qint16 value = API::strHexToShort(QString("%1%2").arg(list.at(i)).arg(list.at(i + 1)));
values.append(value);
}
ui->customPlot9->setDataLine(0, "角度值", keys, values, true);
ui->customPlot9->replot();
}
大神你好,能不能解釋一下這段代碼的大致思路呢,為什么要把每兩個16進制數字組合成一個數字呀,還有setdataline函式是什么意思呢,感覺最后只能畫出一個函式曲線圖呀
uj5u.com熱心網友回復:
參考 1 樓 feiyangqingyun 的回復: 哥們還是我來回答你,我做過類似的
核心代碼如下
QString fileName = QString(":/file/data%1.txt").arg(qrand() % 3);
QFile file(fileName);
if (file.open(QFile::ReadOnly | QIODevice::Text)) {
QString data = QLatin1String(file.readAll());
file.close();
QVector<double> keys, values;
QStringList list = data.split(" ");
int len = list.length();
//如果不是2的倍數則長度要減去1
if (len % 2 != 0) {
len = (len - 1);
}
for (int i = 0; i < len / 2; i++) {
keys.append(i);
}
//每兩個16進制數字組合成一個數字
for (int i = 0; i < len; i = i + 2) {
qint16 value = API::strHexToShort(QString("%1%2").arg(list.at(i)).arg(list.at(i + 1)));
values.append(value);
}
ui->customPlot9->setDataLine(0, "角度值", keys, values, true);
ui->customPlot9->replot();
}
大神你好,能不能解釋一下這段代碼的大致思路呢,為什么要把每兩個16進制數字組合成一個數字呀,還有setdataline函式是什么意思呢,感覺最后只能畫出一個函式曲線圖呀
uj5u.com熱心網友回復:
我的文本檔案是2個位元組合并一個資料
uj5u.com熱心網友回復:
參考 1 樓 feiyangqingyun 的回復: 哥們還是我來回答你,我做過類似的
核心代碼如下
QString fileName = QString(":/file/data%1.txt").arg(qrand() % 3);
QFile file(fileName);
if (file.open(QFile::ReadOnly | QIODevice::Text)) {
QString data = QLatin1String(file.readAll());
file.close();
QVector<double> keys, values;
QStringList list = data.split(" ");
int len = list.length();
//如果不是2的倍數則長度要減去1
if (len % 2 != 0) {
len = (len - 1);
}
for (int i = 0; i < len / 2; i++) {
keys.append(i);
}
//每兩個16進制數字組合成一個數字
for (int i = 0; i < len; i = i + 2) {
qint16 value = API::strHexToShort(QString("%1%2").arg(list.at(i)).arg(list.at(i + 1)));
values.append(value);
}
ui->customPlot9->setDataLine(0, "角度值", keys, values, true);
ui->customPlot9->replot();
}
大神你好,能不能解釋一下這段代碼的大致思路呢,為什么要把每兩個16進制數字組合成一個數字呀,還有setdataline函式是什么意思呢,感覺最后只能畫出一個函式曲線圖呀
參考 5 樓 feiyangqingyun 的回復: 我的文本檔案是2個位元組合并一個資料
參考 5 樓 feiyangqingyun 的回復: 我的文本檔案是2個位元組合并一個資料
噢噢,那你繪制的是colormap嘛,我想繪制colormap圖,但是呼叫setcell函式的時候總是說索引越界
uj5u.com熱心網友回復:
索引 X Y 要在 setSize你設定的范圍內
(colorMap->data()->setSize(nx, ny); // we want the color map to have nx * ny data points),
colorMap->data()->setCell(x, y, z);//這個z的范圍是0到1. 注意這兩個就行了
uj5u.com熱心網友回復:
參考 1 樓 feiyangqingyun 的回復: 哥們還是我來回答你,我做過類似的
核心代碼如下
QString fileName = QString(":/file/data%1.txt").arg(qrand() % 3);
QFile file(fileName);
if (file.open(QFile::ReadOnly | QIODevice::Text)) {
QString data = QLatin1String(file.readAll());
file.close();
QVector<double> keys, values;
QStringList list = data.split(" ");
int len = list.length();
//如果不是2的倍數則長度要減去1
if (len % 2 != 0) {
len = (len - 1);
}
for (int i = 0; i < len / 2; i++) {
keys.append(i);
}
//每兩個16進制數字組合成一個數字
for (int i = 0; i < len; i = i + 2) {
qint16 value = API::strHexToShort(QString("%1%2").arg(list.at(i)).arg(list.at(i + 1)));
values.append(value);
}
ui->customPlot9->setDataLine(0, "角度值", keys, values, true);
ui->customPlot9->replot();
}
大神你好,能不能解釋一下這段代碼的大致思路呢,為什么要把每兩個16進制數字組合成一個數字呀,還有setdataline函式是什么意思呢,感覺最后只能畫出一個函式曲線圖呀
參考 5 樓 feiyangqingyun 的回復: 我的文本檔案是2個位元組合并一個資料
參考 5 樓 feiyangqingyun 的回復: 我的文本檔案是2個位元組合并一個資料
噢噢,那你繪制的是colormap嘛,我想繪制colormap圖,但是呼叫setcell函式的時候總是說索引越界
參考 7 樓 翅膀又硬了 的回復: 索引 X Y 要在 setSize你設定的范圍內
(colorMap->data()->setSize(nx, ny); // we want the color map to have nx * ny data points),
colorMap->data()->setCell(x, y, z);//這個z的范圍是0到1. 注意這兩個就行了
對對,就是這里讓我很頭疼,因為我的txt資料是三個1維陣列,只能用一次for回圈來setcell,所以總是越界。我的代碼如下,大神幫忙看看唄0.0
colorMap->data()->setSize(101, 101);
for (int k=0; k<101*101; ++k)
{
colorMap->data()->setCell(x.at(k),y.at(k),z.at(k));
}
陣列x里面是所有橫坐標,y里面是所有縱坐標,z里面是對應點的電場值
uj5u.com熱心網友回復:
colorMap->data()->setCell(x.at(k),y.at(k),z.at(k))
這里的x.at(k)和y.at(k) 的取值范圍是[0,100],z.at(k)的范圍是[0,1]
我也只能幫你這些了
uj5u.com熱心網友回復:
參考 1 樓 feiyangqingyun 的回復: 哥們還是我來回答你,我做過類似的
核心代碼如下
QString fileName = QString(":/file/data%1.txt").arg(qrand() % 3);
QFile file(fileName);
if (file.open(QFile::ReadOnly | QIODevice::Text)) {
QString data = QLatin1String(file.readAll());
file.close();
QVector<double> keys, values;
QStringList list = data.split(" ");
int len = list.length();
//如果不是2的倍數則長度要減去1
if (len % 2 != 0) {
len = (len - 1);
}
for (int i = 0; i < len / 2; i++) {
keys.append(i);
}
//每兩個16進制數字組合成一個數字
for (int i = 0; i < len; i = i + 2) {
qint16 value = API::strHexToShort(QString("%1%2").arg(list.at(i)).arg(list.at(i + 1)));
values.append(value);
}
ui->customPlot9->setDataLine(0, "角度值", keys, values, true);
ui->customPlot9->replot();
}
大神你好,能不能解釋一下這段代碼的大致思路呢,為什么要把每兩個16進制數字組合成一個數字呀,還有setdataline函式是什么意思呢,感覺最后只能畫出一個函式曲線圖呀
參考 5 樓 feiyangqingyun 的回復: 我的文本檔案是2個位元組合并一個資料
參考 5 樓 feiyangqingyun 的回復: 我的文本檔案是2個位元組合并一個資料
噢噢,那你繪制的是colormap嘛,我想繪制colormap圖,但是呼叫setcell函式的時候總是說索引越界
參考 7 樓 翅膀又硬了 的回復: 索引 X Y 要在 setSize你設定的范圍內
(colorMap->data()->setSize(nx, ny); // we want the color map to have nx * ny data points),
colorMap->data()->setCell(x, y, z);//這個z的范圍是0到1. 注意這兩個就行了
對對,就是這里讓我很頭疼,因為我的txt資料是三個1維陣列,只能用一次for回圈來setcell,所以總是越界。我的代碼如下,大神幫忙看看唄0.0
colorMap->data()->setSize(101, 101);
for (int k=0; k<101*101; ++k)
{
colorMap->data()->setCell(x.at(k),y.at(k),z.at(k));
}
陣列x里面是所有橫坐標,y里面是所有縱坐標,z里面是對應點的電場值
參考 9 樓 翅膀又硬了 的回復: colorMap->data()->setCell(x.at(k),y.at(k),z.at(k))
這里的x.at(k)和y.at(k) 的取值范圍是[0,100],z.at(k)的范圍是[0,1]
我也只能幫你這些了
emmm,修改范圍的話就無法提取全部的txt資料了,不過還是很感謝你啦
uj5u.com熱心網友回復:
你setSize(101, 101); 這意思就是 X Y 范圍都是[0,100],這個是你自己設定的呀。101個 就是從0到100,你這個要根據你的實際范圍設定。Z的范圍你的資料如果不是0到1 就線找到最大值,然后都除一下就行了
uj5u.com熱心網友回復:
參考 11 樓 翅膀又硬了 的回復: 你setSize(101, 101); 這意思就是 X Y 范圍都是[0,100],這個是你自己設定的呀。101個 就是從0到100,你這個要根據你的實際范圍設定。Z的范圍你的資料如果不是0到1 就線找到最大值,然后都除一下就行了
我看函式說明里面介紹說setsize(101,101)表示在兩個坐標軸上各取101個點誒,應該不是指x和y陣列里面的值的范圍吧
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/128051.html
標籤:Qt
上一篇:Android使用POI匯出Excel出錯
下一篇:ViewPager子項Fragment里面的ListView怎么添加點擊監聽?