Część 3 Kursu Programowania w QT4

     W części trzeciej zajmiemy się prostym programikiem rysującym wykres. na wstępie wyjaśnię, że do rysowania wykresów użyjemy biblioteki qwt, którą należy poprać i skompilować samodzielnie. Następnie dostosujemy nasze środowisko do współpracy z qwt (zaznaczam, że korzystam z qdevelop oraz systemu operacyjnego fedora12 ).

QWT instalacja w systemie

Kroki di wykonania potrzebne aby zainstalować qwt w systemie

  • Pobranie qwt
    Kod:
    svn co https://qwt.svn.sourceforge.net/svnroot/qwt/trunk/qwt ~/qwt
  • Instalacja biblioteki
    Kod:
    qmake
    make
    make install
  • Dodajemy ścieżkę do biblioteki aby programy choćby te z katalogu example mogły się wykonywać. u mnie to wygląda tak
    /etc/ld.so.conf
    include ld.so.conf.d/*.conf
    /usr/local/qwt-5.3.0-svn/lib/
    
  • Po dodaniu ścieżki do pliku wykonać polecenie
    Kod:
    ldconfig

Po tych operacjach programy z example powinny się uruchamiać, oraz w qt4-designer powinny pojawić się nowe widżety QWT

Qt Qdevelop - przygotowanie środowiska

Aby qdewelop poprawnie budował aplikacje z wykorzystanie QWT należy wykonać dwie czynności po utworzeniu projektu a mianowicie wskazać w zmiennej include pliki z nagłówkami QWT oraz w opcji linker ścieżkę z biblioteką dokonujemy tego W Projekt -> właściwości nazwa.pro -> zmienne

Qt4 Programowanie - Do roboty

Cała zabawa będzie polegać na tym, że na formatce umieścimy jeden przycisk oraz komponent qwtPlot. Następnie generujemy funkcję obsługi przycisku. W QWT nie posiadamy widżeta krzywej, który można by metodą przeciągnij upuść umieścić na formatce (wówczas kod z nim związany był by dodany do funkcji setupui w pliku ui_mainwindow.h), ręczna edycja tego pliku również odpada (plik generowany jest on każdorazowo podczas budowania programu i wszelkie zmiany w nim zapisane ręcznie się tracą). Pozostaje nam więc utworzenie obiektu klasy QwtPlotCurve z palca

w pliku mainwindowimpl.h znajduje się definicja naszej klasy i w tym pliku będziemy musieli dokonać dwóch zmian.

  • Po pierwsze dodajemy linijkę
    Kod:
    include qwt_plot_curve.h
  • A następnie deklarujemy zmienną wskaźnikową dla naszej krzywej
    Kod:
    QwtPlotCurve *cSin;

Poniżej przedstawiam jak wygląda "nasza klasa"

mainwindowimpl.h
#ifndef MAINWINDOWIMPL_H
#define MAINWINDOWIMPL_H
#include "QMainWindow"
#include "ui_mainwindow.h"
//Dodajemy plik nagłówkowy
#include "qwt_plot_curve.h"

class MainWindowImpl : public QMainWindow, public Ui::MainWindow
{
Q_OBJECT
public:
	QwtPlotCurve *cSin; //deklarujemy skaźnik do obiektu typu QwtPlotCurve
	
	MainWindowImpl( QWidget * parent = 0, Qt::WFlags f = 0 );
private slots:
	void on_pushButton_clicked();
};
#endif

Dalsze kroki związane z tworzeniem zrobimy w konstruktorze klasy naszego okna głównego co zrobić podpatrzyłem w przykładzie simple_plot.

Kod:
cSin = new QwtPlotCurve;
cSin->setLegendAttribute(QwtPlotCurve::LegendShowLine, true);
cSin->setPen(QPen(Qt::red));
cSin->attach(qwtPlot);

Plik z implementacją. Znajdują się w nim dwie funkcje konstruktor oraz funkcja połączona z sygnałem kliknięcia przycisku

mainwindowimpl.cpp -
#include "mainwindowimpl.h"
#include "math.h"


//konstruktor klasy MainWindowImpl
MainWindowImpl::MainWindowImpl( QWidget * parent, Qt::WFlags f) 
	: QMainWindow(parent, f)
{
    setupUi(this);
//tworzymy obiekt klasy QwtPlotCurve wskaźnic cSin będzie na niego wskazywał	
    cSin = new QwtPlotCurve; 
//Dalsze operacje podpatrzone w przykładzie simple_Plot	
    cSin->setLegendAttribute(QwtPlotCurve::LegendShowLine, true);
    cSin->setPen(QPen(Qt::red));
    cSin->attach(qwtPlot);
	
}


//Funkcja wciśnięcia przycisku
void MainWindowImpl::on_pushButton_clicked()
{
	label->setText("Kliknoles klika wykres wypsika");		
	double x[100], y[100];
	for (int i=0; i<100; i++)
		{
		x[i]=(double)i/10;
		y[i] = sin(x[i]);
		}
//dwie funkcje mające na celu wyświetlenie wykresu
	cSin->setSamples(x, y, 100);
	qwtPlot->replot(); 
}

Po instrukcji
Kod:
cSin = new QwtPlotCurve;

Wskaźnik cSin będzie wskazywał rzeczywisty obiekt klasy QwtPlotCurve. Dalsza część implementacji programu odbywa się w funkcji kliknięcia przycisku. Metoda setSample to przypisanie wartości jakie ma przyjmować krzywa. Każdorazowo po jej wykonaniu konieczne jest wywołanie metody replot() obiektu qwtPlot.

Podsumowanie

Gdy już wszystko wygląda jak w kursie pozostaje do wykonania jedna czynność zbuduj i nasz kolejny przykładowy programik będzie gotowy