-> w QT
Ostatnio zmodyfikowano 2018-10-03 11:05
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 #include "mainwindow.h" #include "ui_mainwindow.h"
MainWindow::MainWindow( QWidget * parent ) : QMainWindow( parent ) , ui( new Ui::MainWindow ) { ui->setupUi( this ); connect( ui->horizontalSlider, SIGNAL( valueChanged( int ) ), ui->progressBar, SLOT( setValue( int ) ) ); }
MainWindow::~MainWindow() { 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? |
|
pekfos |
» 2018-09-23 19:54:39 Kropka nie jest po wskaźniku, tylko po tym na co wskazuje. Struktury |
|
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: 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ę #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 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) connect( nadajnik, SIGNAL, odbiornik, SLOT )
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") |
|
« 1 » |