diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2023-03-02 12:51:25 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2023-03-03 07:36:41 +0100 |
commit | ed80c940b659455e2bd98700157f5fc78a17b41c (patch) | |
tree | 15812829e16a24d050d1df845d2304735b02a309 /examples | |
parent | 1bfc0919b8ddb0f1576b6f7ad20a72dc5d23f3e4 (diff) |
graphgallery example: Streamline the code a bit
- Populate the data rows using reserve()/append() instead
of resize() / assign.
- Use prefix increment
- Use QStringView when splitting the data file lines
Pick-to: 6.5
Task-number: QTBUG-110698
Change-Id: I70fed07a9850e2636e6085b9a9190f1e5a062a67
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'examples')
6 files changed, 44 insertions, 47 deletions
diff --git a/examples/datavisualization/graphgallery/highlightseries.cpp b/examples/datavisualization/graphgallery/highlightseries.cpp index c2aab2db..8ce75ac0 100644 --- a/examples/datavisualization/graphgallery/highlightseries.cpp +++ b/examples/datavisualization/graphgallery/highlightseries.cpp @@ -65,14 +65,16 @@ void HighlightSeries::handlePositionChange(const QPoint &position) QSurfaceDataArray *dataArray = new QSurfaceDataArray; dataArray->reserve(endZ - startZ); - for (int i = startZ; i < endZ; i++) { - QSurfaceDataRow *newRow = new QSurfaceDataRow(endX - startX); + for (int i = startZ; i < endZ; ++i) { + QSurfaceDataRow *newRow = new QSurfaceDataRow; + newRow->reserve(endX - startX); QSurfaceDataRow *srcRow = srcArray.at(i); - for (int j = startX, p = 0; j < endX; j++, p++) { + for (int j = startX; j < endX; ++j) { QVector3D pos = srcRow->at(j).position(); - (*newRow)[p].setPosition(QVector3D(pos.x(), pos.y() + 0.1f, pos.z())); + pos.setY(pos.y() + 0.1f); + newRow->append(QSurfaceDataItem(pos)); } - *dataArray << newRow; + dataArray->append(newRow); } dataProxy()->resetArray(dataArray); diff --git a/examples/datavisualization/graphgallery/rainfalldata.cpp b/examples/datavisualization/graphgallery/rainfalldata.cpp index 8765db2c..11b67565 100644 --- a/examples/datavisualization/graphgallery/rainfalldata.cpp +++ b/examples/datavisualization/graphgallery/rainfalldata.cpp @@ -14,7 +14,7 @@ using namespace Qt::StringLiterals; RainfallData::RainfallData() { // In data file the months are in numeric format, so create custom list - for (int i = 1; i <= 12; i++) + for (int i = 1; i <= 12; ++i) m_numericMonths << QString::number(i); m_columnCount = m_numericMonths.size(); @@ -65,7 +65,7 @@ void RainfallData::updateYearsList(int start, int end) { m_years.clear(); - for (int i = start; i <= end; i++) + for (int i = start; i <= end; ++i) m_years << QString::number(i); m_rowCount = m_years.size(); @@ -79,15 +79,14 @@ void RainfallData::addDataSet() VariantDataItemList *itemList = new VariantDataItemList; // Read data from a data file into the data item list - QTextStream stream; QFile dataFile(":/data/raindata.txt"); if (dataFile.open(QIODevice::ReadOnly | QIODevice::Text)) { - stream.setDevice(&dataFile); + QTextStream stream(&dataFile); while (!stream.atEnd()) { QString line = stream.readLine(); if (line.startsWith('#')) // Ignore comments continue; - QStringList strList = line.split(',', Qt::SkipEmptyParts); + const auto strList = QStringView{line}.split(',', Qt::SkipEmptyParts); // Each line has three data items: Year, month, and rainfall value if (strList.size() < 3) { qWarning() << "Invalid row read from data:" << line; @@ -96,8 +95,8 @@ void RainfallData::addDataSet() // Store year and month as strings, and rainfall value as double // into a variant data item and add the item to the item list. VariantDataItem *newItem = new VariantDataItem; - for (int i = 0; i < 2; i++) - newItem->append(strList.at(i).trimmed()); + for (int i = 0; i < 2; ++i) + newItem->append(strList.at(i).trimmed().toString()); newItem->append(strList.at(2).trimmed().toDouble()); itemList->append(newItem); } diff --git a/examples/datavisualization/graphgallery/scatterdatamodifier.cpp b/examples/datavisualization/graphgallery/scatterdatamodifier.cpp index f018c81b..575515a4 100644 --- a/examples/datavisualization/graphgallery/scatterdatamodifier.cpp +++ b/examples/datavisualization/graphgallery/scatterdatamodifier.cpp @@ -71,24 +71,21 @@ void ScatterDataModifier::addData() //! [4] QScatterDataArray *dataArray = new QScatterDataArray; - dataArray->resize(m_itemCount); - QScatterDataItem *ptrToDataArray = &dataArray->first(); + dataArray->reserve(m_itemCount); //! [4] #ifdef RANDOM_SCATTER - for (int i = 0; i < m_itemCount; i++) { - ptrToDataArray->setPosition(randVector()); - ptrToDataArray++; - } + for (int i = 0; i < m_itemCount; ++i) + dataArray->append(QScatterDataItem(randVector())); #else //! [5] - float limit = qSqrt(m_itemCount) / 2.0f; - for (int i = -limit; i < limit; i++) { - for (int j = -limit; j < limit; j++) { - ptrToDataArray->setPosition(QVector3D(float(i) + 0.5f, - qCos(qDegreesToRadians(float(i * j) / m_curveDivider)), - float(j) + 0.5f)); - ptrToDataArray++; + const float limit = qSqrt(m_itemCount) / 2.0f; + for (int i = -limit; i < limit; ++i) { + for (int j = -limit; j < limit; ++j) { + const float x = float(i) + 0.5f; + const float y = qCos(qDegreesToRadians(float(i * j) / m_curveDivider)); + const float z = float(j) + 0.5f; + dataArray->append(QScatterDataItem({x, y, z})); } } //! [5] @@ -148,12 +145,12 @@ void ScatterDataModifier::changeShadowQuality(int quality) void ScatterDataModifier::setBackgroundEnabled(int enabled) { - m_graph->activeTheme()->setBackgroundEnabled((bool)enabled); + m_graph->activeTheme()->setBackgroundEnabled(enabled == Qt::Checked); } void ScatterDataModifier::setGridEnabled(int enabled) { - m_graph->activeTheme()->setGridEnabled((bool)enabled); + m_graph->activeTheme()->setGridEnabled(enabled == Qt::Checked); } void ScatterDataModifier::toggleItemCount() @@ -186,11 +183,9 @@ void ScatterDataModifier::toggleRanges() QVector3D ScatterDataModifier::randVector() { - return QVector3D( - (float)(QRandomGenerator::global()->bounded(100)) / 2.0f - - (float)(QRandomGenerator::global()->bounded(100)) / 2.0f, - (float)(QRandomGenerator::global()->bounded(100)) / 100.0f - - (float)(QRandomGenerator::global()->bounded(100)) / 100.0f, - (float)(QRandomGenerator::global()->bounded(100)) / 2.0f - - (float)(QRandomGenerator::global()->bounded(100)) / 2.0f); + auto *generator = QRandomGenerator::global(); + const auto x = float(generator->bounded(100)) / 2.0f - float(generator->bounded(100)) / 2.0f; + const auto y = float(generator->bounded(100)) / 100.0f - float(generator->bounded(100)) / 100.0f; + const auto z = float(generator->bounded(100)) / 2.0f - float(generator->bounded(100)) / 2.0f; + return {x, y, z}; } diff --git a/examples/datavisualization/graphgallery/surfacegraph.cpp b/examples/datavisualization/graphgallery/surfacegraph.cpp index 6147c437..b5f5a1de 100644 --- a/examples/datavisualization/graphgallery/surfacegraph.cpp +++ b/examples/datavisualization/graphgallery/surfacegraph.cpp @@ -211,7 +211,7 @@ bool SurfaceGraph::initialize(const QSize &minimumGraphSize, const QSize &maximu pmpHighlight.drawRect(border, border, 35, height - 2 * border); pmpHighlight.setPen(Qt::black); int step = (height - 2 * border) / 5; - for (int i = 0; i < 6; i++) { + for (int i = 0; i < 6; ++i) { int yPos = i * step + border; pmpHighlight.drawLine(border, yPos, 55, yPos); const int height = 550 - (i * 110); diff --git a/examples/datavisualization/graphgallery/surfacegraphmodifier.cpp b/examples/datavisualization/graphgallery/surfacegraphmodifier.cpp index 3ab9f7eb..3b2e2f3a 100644 --- a/examples/datavisualization/graphgallery/surfacegraphmodifier.cpp +++ b/examples/datavisualization/graphgallery/surfacegraphmodifier.cpp @@ -154,19 +154,19 @@ void SurfaceGraphModifier::fillSqrtSinProxy() //! [1] QSurfaceDataArray *dataArray = new QSurfaceDataArray; dataArray->reserve(sampleCountZ); - for (int i = 0 ; i < sampleCountZ ; i++) { - QSurfaceDataRow *newRow = new QSurfaceDataRow(sampleCountX); + for (int i = 0 ; i < sampleCountZ ; ++i) { + QSurfaceDataRow *newRow = new QSurfaceDataRow; + newRow->reserve(sampleCountX); // Keep values within range bounds, since just adding step can cause minor drift due // to the rounding errors. float z = qMin(sampleMax, (i * stepZ + sampleMin)); - int index = 0; - for (int j = 0; j < sampleCountX; j++) { + for (int j = 0; j < sampleCountX; ++j) { float x = qMin(sampleMax, (j * stepX + sampleMin)); float R = qSqrt(z * z + x * x) + 0.01f; float y = (qSin(R) / R + 0.24f) * 1.61f; - (*newRow)[index++].setPosition(QVector3D(x, y, z)); + newRow->append(QSurfaceDataItem({x, y, z})); } - *dataArray << newRow; + dataArray->append(newRow); } m_sqrtSinProxy->resetArray(dataArray); diff --git a/examples/datavisualization/graphgallery/topographicseries.cpp b/examples/datavisualization/graphgallery/topographicseries.cpp index ea0be77d..ea6767e0 100644 --- a/examples/datavisualization/graphgallery/topographicseries.cpp +++ b/examples/datavisualization/graphgallery/topographicseries.cpp @@ -30,20 +30,21 @@ void TopographicSeries::setTopographyFile(const QString file, float width, float QSurfaceDataArray *dataArray = new QSurfaceDataArray; dataArray->reserve(imageHeight); - for (int i = 0; i < imageHeight; i++) { + for (int i = 0; i < imageHeight; ++i) { int p = i * widthBits; float z = height - float(i) * stepZ; - QSurfaceDataRow *newRow = new QSurfaceDataRow(imageWidth); - for (int j = 0; j < imageWidth; j++) { + QSurfaceDataRow *newRow = new QSurfaceDataRow; + newRow->reserve(imageWidth); + for (int j = 0; j < imageWidth; ++j) { uchar aa = bits[p + 0]; uchar rr = bits[p + 1]; uchar gg = bits[p + 2]; uint color = uint((gg << 16) + (rr << 8) + aa); float y = float(color) / packingFactor; - (*newRow)[j].setPosition(QVector3D(float(j) * stepX, y, z)); - p = p + 4; + newRow->append(QSurfaceDataItem({float(j) * stepX, y, z})); + p += 4; } - *dataArray << newRow; + dataArray->append(newRow); } dataProxy()->resetArray(dataArray); |