#pragma once #include "../Renderive/base/Tool.h" static QWidget* create_audio_plot() { class Audio_Plot : public renderive::Plot { public: std::shared_ptr x_axis{}; std::shared_ptr y_axis{}; std::shared_ptr audio{}; std::shared_ptr msr{}; QMenu* menu{}; void init() override { Plot::init(); object_name = "Audio_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::Time_Axis::Builder(axis, Qt::Horizontal) .set_tick_length(-10) .set_sub_tick_length(-5) .build(); y_axis = renderive::Axis::Builder(axis, Qt::Vertical).build(); audio = renderive::Audio_Frequency::Builder(data, x_axis, y_axis).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() - 1); x_axis->set_pixel_size(width()); y_axis->set_x(0); y_axis->set_y(0); y_axis->set_pixel_size(height()); audio->set_time_point_size(x_axis->get_pixel_point_size()); } void contextMenuEvent(QContextMenuEvent* event) override { if (!menu) { auto ws = concat_widgets( bw(cw(audio.get(), -1), "音频图"), bw(cw(y_axis.get()), "功率y轴"), bw(cw(x_axis.get()), "时间轴"), bw(cw(msr.get()), "多选框")); menu = create_menu(this, ws); } menu->exec(event->globalPos()); } }; auto w = new Audio_Plot; w->init(); return w; }