Creación de gráficos de velas
Nota: Esto es parte del ejemplo de la Galería de Gráficos con Widgets.

Para mostrar un gráfico de velas, empezamos creando QCandlestickSeries para manejar los datos diarios. También especificamos colores de cuerpo personalizados crecientes y decrecientes.
auto acmeSeries = new QCandlestickSeries; acmeSeries->setName("Acme Ltd"); acmeSeries->setIncreasingColor(QColor(Qt::green)); acmeSeries->setDecreasingColor(QColor(Qt::red));
QFile se utiliza para acceder a un fichero de texto donde se guardan los datos no continuos. CandlestickDataReader es una clase auxiliar para leer el archivo de texto y encontrar los valores de apertura, máximo, mínimo, cierre y marca de tiempo a partir de los datos. El CandlestickDataReader se explica con más detalle más adelante. El método readCandlestickSet() lee los valores y los establece en el elemento QCandlestickSet que el método devuelve a la persona que llama. El elemento QCandlestickSet devuelto se añade a la serie. También guardamos la lista de categorías personalizadas para su uso posterior.
QFile acmeData(":candlestick"); if (!acmeData.open(QIODevice::ReadOnly | QIODevice::Text)) { m_loadError = QStringLiteral("Failed to load '%1' file.").arg(acmeData.fileName()); return false; } QStringList categories; CandlestickDataReader dataReader(&acmeData); while (!dataReader.atEnd()) { QCandlestickSet *set = dataReader.readCandlestickSet(); if (set) { acmeSeries->append(set); categories << QDateTime::fromMSecsSinceEpoch(set->timestamp()).toString("dd"); } }
A continuación, se crea una nueva instancia de QChart y se le añade el objeto de serie creado anteriormente. También definimos un título, y establecemos una animación como QChart::SeriesAnimation.
auto chart = new QChart; chart->addSeries(acmeSeries); chart->setTitle("Acme Ltd. Historical Data (July 2015)"); chart->setAnimationOptions(QChart::SeriesAnimations);
Aquí, le pedimos al gráfico que cree ejes por defecto para nuestra presentación. A continuación, establecemos categorías personalizadas para el eje horizontal consultando el puntero para el eje desde el gráfico y, a continuación, estableciendo las categorías de la lista de categorías personalizadas previamente guardada. También establecemos el rango para el eje vertical consultando el puntero para el eje desde el gráfico y estableciendo los valores mínimo y máximo para ese eje.
chart->createDefaultAxes(); auto axisX = qobject_cast<QBarCategoryAxis *>(chart->axes(Qt::Horizontal).at(0)); axisX->setCategories(categories); auto axisY = qobject_cast<QValueAxis *>(chart->axes(Qt::Vertical).at(0)); axisY->setMax(axisY->max() * 1.01); axisY->setMin(axisY->min() * 0.99);
A continuación, configuramos la leyenda para que sea visible y la colocamos en la parte inferior del gráfico.
chart->legend()->setVisible(true); chart->legend()->setAlignment(Qt::AlignBottom);
Por último, añadimos el gráfico a una vista.
createDefaultChartView(chart);
El gráfico está listo para ser mostrado.
Aquí se explica en detalle el método readCandlestickSet(). En primer lugar, se lee una línea del fichero, rechazando las líneas que empiezan por # ya que se consideran líneas de comentario.
QString line = m_textStream.readLine(); if (line.startsWith("#") || line.isEmpty()) return nullptr;
En el fichero, los datos se disponen como una secuencia de números delimitada por espacios. En este fragmento, la línea se divide en cadenas de números individuales que se almacenan en QStringList.
QStringList strList = line.split(QLatin1Char(' '), Qt::SkipEmptyParts); if (strList.count() != 5) return nullptr;
Para seleccionar valores de los datos continuos, se utiliza el siguiente código. Los valores de strList se almacenan en el siguiente orden: marca de tiempo, apertura, máximo, mínimo y cierre.
const qreal timestamp = strList.at(0).toDouble(); const qreal open = strList.at(1).toDouble(); const qreal high = strList.at(2).toDouble(); const qreal low = strList.at(3).toDouble(); const qreal close = strList.at(4).toDouble();
Por último, el siguiente fragmento muestra cómo crear un nuevo QCandlestickSet y proporcionarle todos los valores necesarios.
auto candlestickSet = new QCandlestickSet(timestamp); candlestickSet->setOpen(open); candlestickSet->setHigh(high); candlestickSet->setLow(low); candlestickSet->setClose(close);
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.