#pragma once #include "../Renderive/base/Tool.h" static QWidget* create_spectrun_plot() { class Spectrum_Plot : public renderive::Plot { public: std::shared_ptr x_axis{}; std::shared_ptr y_axis{}; std::shared_ptr msr{}; std::shared_ptr sp{}; QMenu* menu{}; void init() override { Plot::init(); object_name = "Spectrum_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_coord_range({0, 100}) .set_tick_length(-10) .set_sub_tick_length(-5) .set_use_wheel(true) .set_use_drag(true) .build(); y_axis = renderive::Axis::Builder(axis, Qt::Vertical) .set_coord_range({100, 0}) .set_unit_text("功率") .set_use_drag(true) .build(); sp = renderive::Spectrum::Builder(data, x_axis, y_axis) .set_frequency_range({0, 100}) .build(); msr = renderive::Multi_Select_Rect::Builder(overlay, x_axis, y_axis).build(); } protected: void resizeEvent(QResizeEvent* event) override { int left_margin = 20, right_margin = 20, top_margin = 20, bottom_margin = 20; int w = width() - left_margin - right_margin; int h = height() - top_margin - bottom_margin; x_axis->set_x(left_margin); x_axis->set_y(height() - bottom_margin); x_axis->set_pixel_size(w); y_axis->set_x(left_margin); y_axis->set_y(top_margin); y_axis->set_pixel_size(h); sp->set_frequency_point_size(sp->frequency_axis()->get_pixel_point_size()); } void contextMenuEvent(QContextMenuEvent* event) override { if (!menu) { auto ws = concat_widgets( bw(cw(sp.get(), -1), "频谱图"), bw(cw(x_axis.get()), "频率x轴"), bw(cw(y_axis.get()), "功率y轴"), bw(cw(msr.get()), "多选框")); menu = create_menu(this, ws); } menu->exec(event->globalPos()); } }; auto w = new Spectrum_Plot; w->init(); return w; }