Kohshi's Blog
2013/12/16
QCustomPlotで凡例をクリックしてグラフの表示をToggle
複数のグラフを表示していて、見たいグラフが他のグラフとかぶっててじゃまなんで手前のグラフを 消したいなんて結構あると思う。 そんな時よくあるやりかたとして凡例から対象グラフをクリックするとそれが消えるみたいな。 そのやり方を書いてみる。わりと簡単だけど。 まずは凡例(legend)を表示する方法。QCustomPlotの初期化時に ``` // histogram=QCustomPlot ui.histogram->setAutoAddPlottableToLegend(true);// plottable(=graph)を追加したら自動で凡例に追加 ui.histogram->legend->setVisible(true); // 凡例を表示する for(int i = 0; i < numColorHistogram; i++){ // QCPBars* mpHistogrambars[]; mpHistogramBars[i] = new QCPBars(ui.histogram->xAxis, ui.histogram->yAxis); mpHistogramBars[i]->setName(CHART_NAMES[i]); mpHistogramBars[i]->setPen(QPen(CHART_COLORS[i])); mpHistogramBars[i]->setBrush(QBrush(CHART_COLORS[i])); ui.histogram->addPlottable(mpHistogramBars[i]);// graphをQCustomPlotに追加 } // 凡例がクリックされたらslot toggleVisibilityを呼ぶようにconnect connect(ui.histogram, SIGNAL(legendClick(QCPLegend*,QCPAbstractLegendItem*,QMouseEvent*)), this, SLOT(toggleVisibility(QCPLegend*,QCPAbstractLegendItem*,QMouseEvent*))); ``` そしてtoogleVisibilityで以下のようにvisibilityを変更 ``` void MainWindow::toggleVisibility(QCPLegend* legend, QCPAbstractLegendItem* item, QMouseEvent* event){ if(!item) return; QCPPlottableLegendItem *plItem = qobject_cast
(item); if(!plItem) return; plItem->plottable()->setVisible(!plItem->plottable()->visible()); } ``` これで凡例の対象グラフをクリックするとそのグラフの表示・非表示がtoggleされる。こんな感じ↓
気になる点はlegendをみてどのgraphが現在表示されているのがわからない点。これはまた調査しよう。
ツイート
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿