ページ

2013年12月4日水曜日

Qwt のスライダーを使ってみる

Qtのスライダーもあるけど、
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 の目盛表示



スライダーと目盛幅

https://github.com/yamato8/QwtQwtSliderTest.git

スライダーの目盛の始点と終点の指定
slider->setScale(0,150);

スライダーの位置を取得
slider->value();

スライダーのステップ数
slider->setTotalSteps(200);

0 件のコメント:

コメントを投稿