Witam,
mam pytanko o pisanie okna w Qt (bez użycia designera). Chodzi mi o sposób dodawania nowych elementów do okna jak np. Layout w którym miejscu stworzyć taki obiekt? Dodać go do zmiennych do klasy i później wywołać, czy może dodać wskaźnik i później dynamicznie stworzyć obiekt? Bo opcja tworzenia obiektów w metodach chyba odpada ze względu na brak dostępu do tych obiektów w innych metodach. A może jeszcze inaczej?
Z góry dziękuję za pomoc : )
Tutaj masz tutorial:
http://zetcode.com/gui/qt5/
Na wzór designera, stwórz wskaźnik do obiektu jako pole klasy i zainicjuj w konstruktorze, tak jest chyba najlepiej bo raz że masz obiekt dostępny w każdej funkcji klasy a dwa że możesz podać zmienne do konstruktora przy inicjowaniu obiektu.
Dziękuję za linka : ) Pokaże na kodzie z czym jeszcze mam problem będzie jaśniej ( przy okazji - czy tak to powinno wyglądać? )
Wiem że można do tego użyć wygodnie QtDesigner, ale w ten sposób lepiej poznam panujące w qt zasady : D
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
class MainWindow : public QMainWindow
{
Q_OBJECT
QPushButton* button;
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void foo();
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setMaximumSize(200,100); //można jakoś lepiej usatwić na stałe rozmiar okna?
this->setMinimumSize(200,100);
button = new QPushButton(this); //tworzę przycisk
button->setGeometry(0,0,(this->width())/2,(this->height())/2); //można jakoś ustawić aby przycisk był na środku/prawym górym rogu itp, czy trzeba wszystko przeliczać?
connect(button,SIGNAL(clicked(bool)),this,SLOT(foo())); //stworzenie połączenia
}
void MainWindow::foo(){
delete button; //usunięcia przycisku
}
MainWindow::~MainWindow()
{
}
można to jakoś ładniej/lepiej napisać? + pytania w komentarzach : ) Czy lepiej będzie wykorzystać do tego wskaźnik inteligenty ( chociaż nie wiem co by dał w takiej sytuacji )
Dziękuje bardzo za pomoc : D
#Sposób na ustawienie okna nie jest zły, ale jak chcesz innego, dającego inne możliwości, np pozbycie się przycisku maksymalizacji okna itp to zainteresuj się funkcją: setWindowFlag (http://doc.qt.io/qt-5/qtwidgets-widgets-windowflags-example.html), albo poszukaj w dokumentacji Qt, może znajdziesz jeszcze inny sposób.
#Można, ale tu byś musiał pobawić się layoutami (np http://doc.qt.io/qt-5/qgridlayout.html), nie zawsze też od razu uzyskasz to co byś chciał, sam będziesz musiał zdecydować który sposób jest ci w danej chwili potrzebny, chociaż fakt faktem z layoutami zrobisz wszystko tak że ładnie bedzie ci się skalować wraz ze zmianą rozmiaru okna.
Dodam layout, dziękuję bardzo : D
Jeśli chcesz, żeby layout dopasowywał się do rozmiarów głównego okna to musisz:
1.) utworzyć instancje QWidget bądź klasy dziedziączej.
2.) ustawić go jako 'główny' w klasie dziedziczącej po QMainWindow
za pomocą metody setCentralWidget
3.) Pozostałe elementy dodawać do stworzonego widgeta