Files
Renderive/Demo_Gallery/Waterfall_Plot.h
T
2026-07-29 18:08:57 +08:00

57 lines
2.3 KiB
C++

#pragma once
#include "../Renderive/base/Tool.h"
static QWidget* create_water_fall_plot() {
class Waterfall_Plot : public renderive::Plot {
public:
std::shared_ptr<renderive::Frequency_Axis> x_axis{};
std::shared_ptr<renderive::Time_Axis> y_axis{};
std::shared_ptr<renderive::Multi_Select_Rect> msr{};
std::shared_ptr<renderive::Waterfall> wf{};
QMenu* menu{};
void init() override {
Plot::init();
object_name = "Water_Fall_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Frequency_Axis::Builder(axis, Qt::Horizontal)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.build();
y_axis = renderive::Time_Axis::Builder(axis, Qt::Vertical)
.set_time_point_size(800)
.build();
wf = renderive::Waterfall::Builder(data, x_axis, y_axis)
.set_frequency_range({0, 20})
.build();
msr = renderive::Multi_Select_Rect::Builder(overlay, x_axis, y_axis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
x_axis->set_x(0);
x_axis->set_y(height());
x_axis->set_pixel_size(width());
y_axis->set_x(0);
y_axis->set_y(0);
y_axis->set_pixel_size(height());
y_axis->set_time_point_size(height());
// wf->set_frequency_point_size(wf->frequency_axis()->get_pixel_point_size());
wf->set_frequency_point_size(width());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws = concat_widgets(
bw(cw(wf.get(), -1), "瀑布图"),
bw(cw(x_axis.get()), "频率轴"),
bw(cw(y_axis.get()), "时间轴"),
bw(cw(msr.get()), "多选框"));
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
}
};
auto w = new Waterfall_Plot;
w->init();
return w;
}