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
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
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