Dzień dobry, zacząłem robić sobie aplikacje i niestety zacząłem potrzebować jakiegoś interfejsu graficznego dla niej, a że nauka pyside'a to ból w dupie zacząłem używac qt creatora. Teraz mam taki problem że absolutnie potrzebuje czegoś w rodzaju table widgeta, by zrobić najprostszą w świecie sortowaną listę elementów z jasnymi wyszczególnionymi kolumnami, czyli rzewcz pojawiająca się na kazdym kroku w windowsie i innch systemach zresztą też. tutaj zaczynają się moje problemy, bo w
@NewEpisode: Mało odkrywczo, ale całą wiedzę pochłonąłem z internetu :) Największym problemem mogą być tylko bindingi python-qml i qml-python pamiętam, że był problem z typami i na pograniczu interfejsu trzeba było się dosyć mocno pilnować. Teraz pewnie napisał bym ją zupełnie inaczej, ale tak to jest gdy się pisze pierwszą appkę w nowym języku (mam na myśli qml). Teraz to bym pewnie to napisał w electronie, daje to dużo większą prostotę
  • Odpowiedz
Szukam i szukam i odpowiedzi nie mogę znaleźć. Zabrałem się dzisiaj za qt quick i już na starcie pojawił się problem. Ustawiłem sobie ContextProperty na swój "viewModel", gdzie mam QList. Pakuje do niej powiedźmy obiekty klasy Person, jak zbindować tą listę z ComboBoxem, żeby wyświetlaną wartością było pole Name. Z góry dziękuje.
#cpp #qt #qt5 #qml #naukaprogramowania
@GaHee:
Ustawiasz textRole na property która jest koniecznie QString(albo coś co zmienia się do jsowego stringa):

ComboBox {
        textRole:"myProperty"
        
model: myArray
    }

Generalnie na viewModel trzeba uważać bo każdy rodzaj obiektu działa inaczej. Najbardziej odpowiednie i najtrudniej jest zrobić własny model w C++ dziedzicząc po QAbstractListModel. Generalnie jak przekażesz tablicę to większość obiektów jako model przyjmie to w pewien wrapper który wystawia tylko jedną zmienną modelData do którego
  • Odpowiedz
@lionbest: Pamiętaj że w klasie którą wrzucasz do listy musisz mieć to property w pełnie zadeklarowane:

Q_PROPERTY(QString myProperty READ myProperty WRITE setMyProperty NOTIFY myPropertyChanged)
Chyba że ta wartość zawsze będzie stała (od powstawia obiektu) i deklarowanie sygnału NOTIFY jest bezensu wtedy deklarujesz tak:

Q_PROPERTY(QString myProperty READ myProperty CONSTANT )
Inaczej QML się burzy że nie ma sygnału NOTIFY.
  • Odpowiedz
@login4: Ogółem tak, gitara jest po prostu... Słaba, chodzi mi o to, że trzeba przejechać po strunie, a nie dotknąć, często przez to pojawia się problem z podwójnym dźwiękiem. 3 gra - ok, ujdzie, mogłeś dać w tle muzykę. Pianino jest dobre, tylko mało dźwięków
  • Odpowiedz
Mam aplikację napisaną w C++ pod Raspberry. Interfejs aplikacji zrobiony w QML. Gdy odpalam aplikację i dostaję warningi.

EGLFS: To override, set QT*QPA*EGLFS*PHYSICAL*WIDTH and QT*QPA*EGLFS*PHYSICAL*HEIGHT (in millimeters).


Eksportuje zmienne środowiskowe i dalej to samo. Gdy tego samego QML odpalam za pomocą qmlscene to wszystko działa jak należy. Pytanie takie, czemu dla programu napisanego w C++, który odpala tego QML nie są widoczne te zmienne środowiskowe?

Przekompilowuje właśnie całe QT i na sztywno
@Vetinari: tak jak mówiłem, dodaje te zmienne środowiskowe. Gdy uruchomię plik QML za pomocą qmlscrene (qmlscrene main.qml) to widzi je, gdy natomiast uruchomię za pomocą prostego programu:

#include <QtGui/QGuiApplication>


#include "qtquick2applicationviewer.h"



int main(int argc, char *argv[])


{


QGuiApplication app(argc, argv);


QtQuick2ApplicationViewer viewer;


viewer.setMainQmlFile(QStringLiteral("main.qml"));


viewer.showExpanded();


return app.exec();


}

To już nie widzi.
  • Odpowiedz
@Vetinari: oka, mój błąd. Potrzebowałem uruchamiać program jako root, więc używałem sudo. Wydawało mi się, że sprawdzałem uruchamianie bez sudo i ciągle miałem te warningi. Jednak nie. W dokumentacji sudo znalazłem, że jeżeli chcemy mieć zmienne środowiskowe takie jak użytkownik to musimy dodać parametr -E. Wszystko działa. Dziękuję za pomoc.
  • Odpowiedz