Qt okno kod

0

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

0

Tutaj masz tutorial:
http://zetcode.com/gui/qt5/

0

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.

0

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

0

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

0

Dodam layout, dziękuję bardzo : D

1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1