Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Tut]Qt Creator - wstęp


Rekomendowane odpowiedzi

Weteran
Opublikowano

Witam,

w tym tutorialu pokaże wam od 0 jak korzystać z samej biblioteki Qt, oraz oczywiście genialnego środowiska zrobionego specjalnie pod tą bibliotekę.

Celem tego niezbyt długiego poradnika jest przedstawienie i przekonanie was do Środowiska Qt Creator, jest to genialnego narzędzie, ale niestety mało popularne na tym forum.

 

Czego oczekuję od czytelnika?

-Podstawowej znajomości c++(czyli oop również)

-Obsługi komputera(nie będę się rozpisywać jak zainstalować IDE)

-I oczywiście zaangażowania

Tworzenie projektu

Zacznijmy od początku, Qt Creator możemy pobrać stąd: http://qt.nokia.com/downloads/, po zainstalowaniu mamy już wszystko co nam będzie potrzebne do korzystania z Qt. Następnym krokiem będzie utworzenie nowego projektu:

Plik -> Nowy plik lub projekt -> Projekt Qt Widget -> Aplikacja Gui Qt -> Nazywamy nasz projekt -> W ustawieniach produktu docelowego wybieramy Desktop -> Dalej... Zakończ...

Nasz projekt jest już gotów do pracy.

Jeśli wszystko dobrze poszło w naszym projekcie powinniśmy mieć 4(5) pliki: main.cpp, mainwindow.cpp, mainwindow.h, mainwindow.ui, nazwa.pro(plik konfiguracyjny).

 

Prześledźmy teraz po trochu zawartość tych plików

W mainwindow.h mamy deklaracje klasy mainwindow, jest to jakby nasza główna klasa programu.

W mainwindow.cpp mamy definicje tej samej klasy, jak widzimy dziedziczy ona po QMainWindow - wbudowanej klasie, oraz Ui - formularzu w którym będziemy umieszczać nasze buttony itp.

Mamy również plik main.cpp, a w nim nic szczególnego, odpowiada on za samo wyświetlenie okna.

Przedostatnim plikiem jest mainwindow.ui, w nim mamy zapisane pozycje, zawartość, połączenie itp. widżetów. Aby go edytować - klikamy na niego dwukrotnie i powinno nam się pojawić okienko do którego możemy wstawić widżety i wszystko co nam dusza zapragnie, a edytor zamieni to automatycznie na kod xml, a on nam w magiczny sposób stworzy w programie klasy.

Ostatnim plikiem jest plik z rozszerzeniem .pro, w nim będziemy umieszczać wszelkie konfiguracje dot. linkera/kompilatora.

 

Projektowanie

Okey, przejdźmy teraz do konkretów!

Pokaże wam na przykładzie pierwszej aplikacji jak korzystać z Qt Creator`a.

Myślałem nad tym co to ma być za aplikacja i padło na przeglądarkę internetową, w Qt jest to przerażająco łatwe do wykonania.

Pierwszym krokiem jest zaprojektowanie okienka programu, a więc wykonujemy dwuklik na pliku mainwindow.ui i postępujemy zgodnie z krokami poniżej:

Usuwamy nie potrzebne śmieci z naszego okienka: klikamy ppm`em na dwa paski u góry -> usuń pasek narzędzie[...] & usuń pasek menu -> klikamy prawym na pasek na dole i usuwamy go w taki sam sposób. Oczyszczone okienko powinno wyglądać tak:

okno1.jpg

 

Po lewej stronie mamy listę z widżetami wybieramy z niej QWebView, przyciągamy go na okienko, a nad nim wstawiamy Line Edit i Push Button, robiąc to w taki sam sposób. Ostatecznie klikamy na okno i wciskamy kombinacje ctrl + G, dzięki czemu całość się dopasuje do okna i podczas rozciągania okienka, widżety będą się inteligentnie rozmieszczać. Możemy również zmienić nazwę buttona poprzez dwukrotne kliknięcie na niego, Całość powinno wyglądać to tak:

okno2.jpg

Programowanie

Teraz należy oprogramować całość, pierwszym krokiem jest dodanie odpowiedniego rozszerzenia - webkit, w tym celu wchodzimy w Edycja -> nazwaprojektu.pro - > dopisujemy

QT += webkit

.

Kolejną i najważniejszą czynność jest zaprogramowanie widżetów, bo do tej pory jedynie co mogły robić to stać w okienku i ładnie wyglądać.

Przejdźmy do konstruktora w pliku mainwindow.cpp, linijka ui->setupUi(this) instaluję Ui, pod nią napiszemy połączenie które będzie odpowiadać za wciskanie buttona:

connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(load()));

W Qt jest tzw. system połączeń, czyli poprzez odpowiednią funkcje łączymy dany widżet z jakąś funkcją, jeżeli obiekt wyśle określony sygnał(SIGNAL) to zostanie uruchomiona dana funkcja w slocie(SLOT).

Czyli teraz musimy napisać funkcje load(), która będzie uruchomiana po kliknięciu(clicked()) na przycisk.

W tym celu "wyruszamy" do pliku mainwindow.h i deklarujemy funkcje, ale nie byle jaką funkcje, tylko taką która jest slotem:

	public slots:
void load();

Teraz wracamy do mainwindow.cpp i definiujemy tą funkcje:

void MainWindow::load()
{
ui->webView->load(QUrl("http://" + ui->lineEdit->text()));
}

W jej wnętrzu widzimy wywołanie funkcji load dla okienka przeglądarki(webView) z naszego Ui.

Funkcja ta, jak łatwo się domyśleć wyświetla daną stronę w okienku, jako argument przyjmuje string QUrl, ale funkcja text użyta na lineEdit zwraca QStringa, więc musimy to przekonwertować na QUrl.

 

Na koniec podam jak powinny wyglądać pliki klasy mainwindow(w razie wątpliwości):

 

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;

public slots:
void load();

};

#endif // MAINWINDOW_H

 

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(load()));

ui->webView->load(QUrl("http://mpcforum.pl/"));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::load()
{
 ui->webView->load(QUrl("http://" + ui->lineEdit->text()));

}

Efekt pracy końcowej:

exemple.jpg

 

Na pożegnanie zamieszczę jeszcze kilka innych przydanych funkcja klasy QWebView.

 

reload() - odświeża stronę

back() - cofa do poprzedniej strony

forward() - cofa cofnięcie :]

settings()->setAttribute() - Ustawienia, możemy za pomocą te funkcji włączyć różne przydatne funkcję np.:

 

settings()->setAttribute(QWebSettings::PluginsEnabled, true); - włącza pluginy, flash itp.

settings()->setAttribute(QWebSettings::JavascriptEnabled, true); - włącza javascript

settings()->setAttribute(QWebSettings::AutoLoadImages, true); - włącza automatycznie ładowanie obrazków(defaultowo jest chyba włączone)

 

 

W razie napotkania jakichkolwiek błędów piszcie pod tym tematem.

Weteran
Opublikowano

Odświeżam

 

Jeżeli Qt znajdzie trochę większe zainteresowanie, to będę mógł napisać drugą cześć z implementacją protokołu TCP w Qt.

  • 1 miesiąc temu...
  • 4 tygodnie później...
Opublikowano

Mam dokładnie tak samo jak ty ;p A wywala mi w piz** błedów :) Wszędzie "Brak pliku mainwindow.obj" o co biega??;p

hcq0.png


Opublikowano

Dobra juz wiem o co biega ;p ZapomniałEM O qt += webkit :)

 

@edit

 

Wszystko ładnie pięknie ale... wpisuje strone i klikam mój PushButton i nic :) o co chodzi ?:P

hcq0.png


Weteran
Opublikowano

Dobra juz wiem o co biega ;p ZapomniałEM O qt += webkit :)

 

@edit

 

Wszystko ładnie pięknie ale... wpisuje strone i klikam mój PushButton i nic :) o co chodzi ? :P

Adres wpisujesz razem z przedrostkiem html? Spróbuj wpisać samo "google.pl".

Opublikowano

Adres wpisujesz razem z przedrostkiem html? Spróbuj wpisać samo "google.pl".

 

wpisuje i dalej QWebView jest pusty :)

hcq0.png


Weteran
Opublikowano

wpisuje i dalej QWebView jest pusty :)

Nie może być pusty, ponieważ w konstruktorze jest używana metoda load na webView, która ładuję stronę:

ui->webView->load(QUrl("http://mpcforum.pl/"));

 

To raczej nie jest wina kodu czy IDE. Może zapora blokuję program?

  • 7 miesięcy temu...
Opublikowano

Ogolnie fajnie ze cos robisz i w ogole, ale qt samo w sobie ma taka baze przykladowych kodow + sporo w dokumentacji, ze to jest takie wymyslanie kola na nowo. Wystarczy jako taka znajomosc angielskiego i kazdy sobie poradzi z uzyciem/przerobioeniem ich gotowcow.

  • 4 miesiące temu...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...