Qwt で用意してあるスライダーを使ってみる。
とりあえず、表示してみる。
#include "mainwindow.h" #include <QApplication> #include <qwt_plot.h> #include <qwt_slider.h> int main(int argc, char *argv[]) { QApplication a(argc, argv); //MainWindow w; //w.show(); QwtPlot *plot = new QwtPlot; // スライダー関係 QwtSlider *slider = new QwtSlider(plot); slider->setOrientation(Qt::Horizontal);//横位置のスライダー plot->resize( 600, 400 ); plot->show(); return a.exec(); }表示だけは、さすがに簡単でした。
キャンバスの中にスライダーを表示してみる。
キャンバスはプロットエリアか?
#include "mainwindow.h" #include <QApplication> #include <qwt_plot.h> #include <qwt_slider.h> int main(int argc, char *argv[]) { QApplication a(argc, argv); //MainWindow w; //w.show(); QwtPlot *plot = new QwtPlot; //キャンバスを取得 QWidget *myCanbas = plot->canvas(); // スライダー関係 QwtSlider *slider = new QwtSlider(myCanbas); slider->setOrientation(Qt::Horizontal);//横位置のスライダー plot->resize( 600, 400 ); plot->show(); return a.exec(); }
スライダーをキャンバスの下に置きたいので、レイアウトを考えてみる。
#include "mainwindow.h" #include <QApplication> #include <qwt_plot.h> #include <qwt_slider.h> #include <QBoxLayout> int main(int argc, char *argv[]) { QApplication a(argc, argv); //MainWindow w; //w.show(); QwtPlot *plot = new QwtPlot; //キャンバスを取得 QWidget *myCanbas = plot->canvas(); // スライダー関係 QwtSlider *slider = new QwtSlider(); slider->setOrientation(Qt::Horizontal);//横位置のスライダー // レイアウトを考える QVBoxLayout *layout = new QVBoxLayout;//レイアウトを設定 上から下 layout->addStretch(1);//上に空白を開ける layout->addWidget(slider);//レイアウトにスライダーを入れる // キャンバスにレイアウトを設定 myCanbas->setLayout(layout); plot->resize( 600, 400 ); plot->show(); return a.exec(); }
やっぱりキャンバスの中で無い方がいいのかな?
スライダーの位置を取得してみる。
main.h
#ifndef MAIN_H #define MAIN_H #include <QWidget> #include <QApplication> #include <qwt_plot.h> #include <qwt_slider.h> #include <QBoxLayout> class MyMain : public QWidget { Q_OBJECT public: MyMain(QWidget *parent = 0): QWidget(parent) { } public slots: void setValueToTheLabel(double value); }; #endif // MAIN_H
main.cpp
#include "main.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); //MainWindow w; //w.show(); QwtPlot *plot = new QwtPlot; //キャンバスを取得 QWidget *myCanbas = plot->canvas(); // スライダー関係 QwtSlider *slider = new QwtSlider(); slider->setOrientation(Qt::Horizontal);//横位置のスライダー MyMain *mySlot = new MyMain; QObject::connect( slider, SIGNAL(valueChanged(double)), mySlot, SLOT(setValueToTheLabel(double)) ); // レイアウトを考える QVBoxLayout *layout = new QVBoxLayout;//レイアウトを設定 上から下 layout->addStretch(1);//上に空白を開ける layout->addWidget(slider);//レイアウトにスライダーを入れる // キャンバスにレイアウトを設定 myCanbas->setLayout(layout); plot->resize( 600, 400 ); plot->show(); return a.exec(); } void MyMain::setValueToTheLabel(double value) { qDebug() << QString::number( value ); }スライダーを移動させるとQT Creatorのアプリケーション出力に値が表示される。
QwtSlider の目盛表示
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "mainwindow.h" | |
#include "ui_mainwindow.h" | |
#include <qwt_plot.h> | |
#include <qwt_counter.h> | |
#include <qwt_plot_curve.h> | |
#include <qwt_plot_marker.h> | |
#include <qwt_slider.h> | |
MainWindow::MainWindow(QWidget *parent) : | |
QMainWindow(parent), | |
ui(new Ui::MainWindow) | |
{ | |
ui->setupUi(this); | |
QwtPlot *plot = new QwtPlot; | |
ui->verticalLayout_2->addWidget(plot); | |
QwtPlotCurve *sinCurve = new QwtPlotCurve(); | |
sinCurve->setTitle( "sin curve" ); | |
sinCurve->setPen( Qt::blue, 1 ),sinCurve->setRenderHint( QwtPlotItem::RenderAntialiased, true ); | |
QVector<double> sinX;//空のベクタ宣言 | |
QVector<double> sinY;//空のベクタ宣言 | |
for( int i = 0 ; i <= 1000 ; ++i ){ | |
double x = i/(1000-1.0); | |
sinX.append( x ); | |
sinY.append( sin(2*M_PI*x) ); | |
} | |
sinCurve->setSamples(sinX.data(), sinY.data(), sinX.count()); | |
sinCurve->attach( plot ); | |
//マーカー | |
QwtPlotMarker *markerH = new QwtPlotMarker(); | |
markerH->setLineStyle(QwtPlotMarker::HLine);// 横ライン | |
markerH->setYValue(0.0);// 線の位置 | |
markerH->setLabelAlignment(Qt::AlignRight|Qt::AlignTop);// マーカーラベルの位置 | |
markerH->attach(plot); | |
QwtPlotMarker *markerV = new QwtPlotMarker(); | |
markerV->setLineStyle( QwtPlotMarker::VLine );// 縦ライン | |
markerV->setXValue( 1.0 ); | |
markerV->attach( plot ); | |
plot->setAxisScale( QwtPlot::xBottom, 0.0, 1.0 );//目盛 | |
plot->setFixedHeight(250); | |
//以下スライダー関係 | |
QwtSlider *slider = new QwtSlider(); | |
connect(slider, SIGNAL(valueChanged(double)), this, SLOT(setValue(double))); | |
slider->setOrientation(Qt::Horizontal);//横位置のスライダー | |
ui->verticalLayout_2->addWidget(slider); | |
//slider->setScalePosition(QwtSlider::NoScale);//目盛を非表示 | |
QwtScaleDiv div(0, 150);//スライダーの始点・終点 | |
//スライダーの目盛 | |
QList<double> majorTicks; | |
majorTicks << 0 << 75 << 150; | |
div.setTicks(QwtScaleDiv::MajorTick, majorTicks); | |
slider->setScale(div);//ok | |
} | |
MainWindow::~MainWindow() | |
{ | |
delete ui; | |
} | |
void MainWindow::setValue(double value) | |
{ | |
qDebug() << value; | |
} | |
スライダーと目盛幅
https://github.com/yamato8/QwtQwtSliderTest.git
スライダーの目盛の始点と終点の指定
slider->setScale(0,150);
スライダーの位置を取得
slider->value();
スライダーのステップ数
slider->setTotalSteps(200);
0 件のコメント:
コメントを投稿