数据可视化控件:折线图/柱状图/饼图,支持坐标轴、图例、Tooltip。
Chart 控件提供常用数据可视化:
• 折线图:趋势展示,支持多系列
• 柱状图:分组/堆叠模式,水平/垂直方向
• 饼图:占比展示
• 坐标轴:数值/分类/时间轴类型
• 图例/Tooltip:自动图例 + 悬停数据提示
| 函数 | 说明 |
|---|---|
int xuiChartCreate(xui_context pCtx, xui_widget* ppW, const xui_chart_desc_t* pDesc) | 创建图表 |
int xuiChartSetTitle(pW, sTitle) | 图表标题 |
int xuiChartSetColors(pW, iBg, iPlot, iGrid, iAxis, iText, iTip, iTipText) | 颜色配置 |
int xuiChartSetXAxis(pW, iAxisType) | X 轴类型 |
int xuiChartSetYAxis(pW, iAxisType) | Y 轴类型 |
int xuiChartSetBarMode(pW, iMode) | 柱状图模式 |
int xuiChartSetBarDirection(pW, iDir) | 柱状方向 |
int xuiChartSetLegendVisible(pW, bVisible) | 图例显隐 |
gcc -O2 -I. -o ch180.exe ch180_main.c src\xui_*.c build\xge.lib -lm -lws2_32 -liphlpapi -lgdi32 -luser32 -lshell32 -lopengl32 -lole32 -lwinmm -lavrt
.\ch180.exe
xui_chart_desc_t desc = { 0 };
xui_widget pChart;
xuiChartCreate(pCtx, &pChart, &desc);
// 标题与颜色
xuiChartSetTitle(pChart, "FPS Monitor");
xuiChartSetColors(pChart,
0x1A1A2EFF, 0x16213EFF, 0x333355FF,
0x888888FF, 0xCCCCCCFF, 0x333333FF,
0xFFFFFFFF);
// 坐标轴
xuiChartSetXAxis(pChart, 1); // 时间轴
xuiChartSetYAxis(pChart, 0); // 数值轴
// 显示图例
xuiChartSetLegendVisible(pChart, 1);
xuiWidgetAddChild(pPanel, pChart);将以下代码保存为 ch180_main.c,编译后运行即可看到一个 FPS 监控折线图:
#include "xge.h"
#include "xui.h"
static xui_context g_pCtx;
static int onFrame(void* pUser) {
(void)pUser;
xgeClear(0x1A1A2EFF);
xui_vec2_t pos;
xgeMouseGet(&pos.x, &pos.y);
xuiInputPointerMove(g_pCtx, pos.x, pos.y);
if (xgeMouseDown(XGE_MOUSE_LEFT))
xuiInputPointerDown(g_pCtx, pos.x, pos.y, 0);
else
xuiInputPointerUp(g_pCtx, pos.x, pos.y, 0);
xuiUpdate(g_pCtx, xgeGetDelta());
xuiLayout(g_pCtx);
xuiRender(g_pCtx, NULL, NULL, 0);
return XGE_OK;
}
int main(void) {
xge_desc_t d = { 0 };
d.iWidth = 800; d.iHeight = 600;
d.sTitle = "ch180 - Chart";
d.iFlags = XGE_INIT_VSYNC;
xgeInit(&d);
xuiCreate(&g_pCtx);
extern const xui_proxy_t tXgeProxy;
xui_proxy_t tXgeProxy = xuiProxyXge();
xuiSetProxy(g_pCtx, &tXgeProxy);
xuiSetViewportSize(g_pCtx, 800, 600);
// 创建图表
xui_chart_desc_t cdesc = { 0 };
xui_widget pChart;
xuiChartCreate(g_pCtx, &pChart, &cdesc);
// 标题与配色
xuiChartSetTitle(pChart, "FPS Monitor");
xuiChartSetColors(pChart,
0x1A1A2EFF, 0x16213EFF, 0x333355FF,
0x888888FF, 0xCCCCCCFF, 0x333333FF,
0xFFFFFFFF);
// 坐标轴:X=时间轴,Y=数值轴
xuiChartSetXAxis(pChart, 1);
xuiChartSetYAxis(pChart, 0);
// 显示图例
xuiChartSetLegendVisible(pChart, 1);
xui_widget pRoot = xuiGetRootWidget(g_pCtx);
xuiWidgetAddChild(pRoot, pChart);
xuiWidgetSetRect(pChart, (xui_rect_t){0, 0, 800, 600});
xgeRun(onFrame, NULL);
xuiDestroy(g_pCtx);
xgeUnit();
return 0;
}