Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

-> w QT

Ostatnio zmodyfikowano 2018-10-03 11:05
Autor Wiadomość
Pawełek
Temat założony przez niniejszego użytkownika
-> w QT
» 2018-09-23 19:35:19
Niedawno ściągnąłem sobie QT creatora i zaczynam dopiero powoli go ogarniać. Natrafiłem niestety na kilka niezrozumiałych dla mnie części kodu.

Oto przykładowy kod z mojego projektu z pliku mainwindow.cpp

C/C++
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow( QWidget * parent ) //konstruktor
    : QMainWindow( parent )
     , ui( new Ui::MainWindow ) // Co to jest i czemu to służy?
{
    ui->setupUi( this ); //Tego także nie rozumiem
   
    connect( ui->horizontalSlider, SIGNAL( valueChanged( int ) ), ui->progressBar, SLOT( setValue( int ) ) ); // Funkcja
}

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

Szukając informacji w internecie, wyczytałem że, a->b znaczy to samo co (*a).b szczerze mówiąc to nie spotkałem się jeszcze ze wskaźnikiem po którym byłaby kropka. Mógłby mi ktoś wyjaśnić za co odpowiada wskaźnik ui w kodzie powyżej?
P-172389
pekfos
» 2018-09-23 19:54:39
Kropka nie jest po wskaźniku, tylko po tym na co wskazuje.
» Kurs C++ » Poziom 5Struktury lekcja
P-172390
mateczek
» 2018-10-03 11:05:19
Mógłby mi ktoś wyjaśnić za co odpowiada wskaźnik ui w kodzie powyżej?

konstruktor klasy mainWindow mógłby wyglądać tak:

C/C++
MainWindow::MainWindow( QWidget * parent )
    : QMainWindow( parent )
{
    ui = new Ui::MainWindow;
    ui->setupUi( this );
}
ale zamiast tego zapisu który ja tu wstawiłem masz inicjalizacje obiektu za pomocą listy inicjalizacyjnej

W nagłówkach u samej góry masz linijkę
C/C++
#include "ui_mainwindow.h"
i to w tym pliku należy szukać definicji klasy której instancje tworzysz za pomocą
ui = new Ui::MainWindow;
 czyli definicja klasy "Ui::MainWindow" znajduje się w pliku "ui_mainwindow.h" A jest to po prostu plik nagłówkowy generowany automatycznie na podstawie tego co tam po prostu wrzuciłeś na formatkę w edytorze graficznym.

Jeśli na formatkę ciepniesz przycisk to taki kawałek kodu zostanie dodany w funkcji ui->setupUi
C/C++
pushButton = new QPushButton( centralWidget );
pushButton->setObjectName( QStringLiteral( "pushButton" ) );
pushButton->setGeometry( QRect( 150, 130, 80, 23 ) );
I oto cała filozofia tego magicznego ui-> (obiekt klasy, która jest generowana na podstawie formatki designera)

C/C++
connect( nadajnik, SIGNAL, odbiornik, SLOT ) // to jest mechanizm Qt rozszerzenie c++, które możliwa łączenie ze sobą dwóch obiektów. Wygodny mechanizm tzw. callbacków(wywołań zwrotnych)
Mechanizm sygnałów i slotów był w QT zanim jeszcze std::function std::bind() i funkcje lambda były w użyciu.
W momencie gdy obiekt nadajnik emituje sygnał slot odbiornika się wykona z automatu. (szukaj google "sygnały i sloty QT")
P-172525
« 1 »
  Strona 1 z 1