#cpp #qt

Ktoś wie jak w Qt (5.2) podpiąć się pod dropowanie czegoś na pasku zadań (pod Linuksem i Windowsem), oraz na ikonę aplikacji pod Mac'iem?

Wydaje mi się, że gdzieś w dokumetacji widziałem wzmiankę na temata tego dot. MacOS X'a, ale nie mogę teraz znaleźć. Pod Linuksa i Windowsa też coś powinno być (jak chwytam plik i najeżdżam na pasku zadań na moją apkę, to kursor sugeruje, że można).
BTW wiesz może jak trochę "odchudzić" program? Aplikacja ma ledwie kilkaset linijek, ale biblioteki qt zajmują ponad 40 mb (po spakowaniu zipem 16)/


@duffman: jeżeli używasz Qt5, to pewnie połowę tych 40MB stanowią biblioteki ICU, jeżeli nie używasz czegoś co od nich zależy (np. QWebView ich wymaga), to można się ich pozbyć, ale konieczne jest przekompilowanie całego Qt z odpowiednimi flagami (chyba -no-icu)

http://qt-project.org/wiki/Building-Qt-5-from-Git
Mam klasę Figura, do reprezentowania obiektów na ekranie i dziedziczącą z niej klasę FigTrojkat z przeładowaną metodą rysuj() .

W klasie odpowiedzialnej za wyświetlanie openGLa zrobiłem sobie Qlist na obiekty Figura.

QList<Figura> ListaDoNarysowania;


A w jej konstruktorze przypisuję do listy obiekt Trójkąta:

FigTrojkat FTR = new FigTrojkat(0,0);


ListaDoNarysowania.append(FTR);

Później w painGl mam coś takiego:

for(int i=0; i < ListaDoNarysowania.size(); ++i)


{


ListaDoNarysowania[i].rysuj();


}

Kompilator nie wywala błędów, a program i tak nie
@duffman: Po pierwsze, odpowiedz sobie na pytanie: dlaczego chcesz korzystać z polimorfizmu? W 99% przypadków tak na prawdę nie chcesz z niego korzystać. Jeśli jednak się uprzesz, to musisz operować na wskaźnikach:

QList ListaDoNarysowania;
ListaDoNarysowania.append(new FigTrojkat(0, 0));
for(int i=0; i < ListaDoNarysowania.size(); ++i)
{
ListaDoNarysowania[i]->rysuj();
}
Oczywiście, nie zapomnij później o zwolnieniu pamięci zaalokowanej przez operator new. Kwestie nazewnictwa pozostawię już bez komentarza.
@duffman: Powiem tak: Nie znam się na androidzie, ani na Qt, ale moje wieloletnie doświadczenie na polibudzie podpowiada mi żeby nigdy nie brać zbyt ambitnych tematów prac/zaliczeń. Nikt złożoności twojego projektu nie doceni, a łatwo się wyłożyć. Na zaliczenie weź sobie jakiś "hello world" a grę w Qt na andka zrób w swoim czasie.
Mam funkcję, która rysuje tekst w widżecie QGraphicsScene. Tekst jest umieszczany na współrzędnych wczytywanych z listy (QList) i ma pokazać te współrzędne. Problem w tym, że nie wiem jak zrobić, żeby wszystkie elementy pokazały się na ekranie. Jak robię to według pliku 1, to pokazuje mi się tylko ostatni element z listy na ekranie. Metoda z pliku 2 działa, ale nie będę tak robił dla 50 elementów i potrzebuję pętli. Czy może
Robię program w QT odbierający pakiety wysyłane po UDP, które ma pokazywać na ekranie (konkretnie w QLabel). Problem w tym, że program mi się wywala po odebraniu pierwszego pakietu. (Program nieoczekiwanie zakończył pracę). Po odpaleniu debuggera wskazało mi jedną z linii, odpowiadającą za wyświetlenie tekstu w oknie. Pytanie: co robię źle?

Kod

#programowanie #qt #kiciochpyta
@Vetinari: nie zagłębiałem się w niskopoziomową obsługę socketów (warstwy poniżej QTcpSocket i QUdpSocket) pewnie pod spodem siedzą jakieś wątki ale z poziomu osoby używającej socketów w Qt nie jest to widoczne. Sprawdziłem i slot wywołuje się w głównym wątku, więc może modyfikować GUI.

@zacietrzewiony

Ale zeszliśmy z tematu, a ja chyba mam rozwiązanie zagadki:

w konstruktorze brak wywołania ui->setupUi(this); które tworzy obiekt QLabel i przypisuje wskaźnik do ui->label.
Próbuję przenieść swój kod OpenGl z GLUTa do okienka w qtCreatorze i w tym celu skopiowałem sobie klasę z http://blog.matthew.org.pl/2010/04/17/kurs-qt-czesc-8-opengl/ ,

http://pastebin.com/YNHh5iW7

ale próba kompilacji wywala mnóstwo błędów o niezadeklarowanych funkcjach opengl.

Kiedy próbuję dodać # include do mojego pliku z nagłówkami zgodnie z tym:

http://qt-project.org/forums/viewthread/14269

to dostaję błędy jak w screenie. O co tu chodzi?

#qt #programowanie #opengl
Pobierz d.....n - Próbuję przenieść swój kod OpenGl z GLUTa do okienka w qtCreatorze i w tym ...
źródło: comment_hZL0nf72SEgDbBhiNbMcn7XrtxTBxlEp.jpg
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.
@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.
Po ostatnich zabawach z phpStorm(niszczy wszystko, tylko drogi ;_;), teraz przyszła kolej na zabawę z #cpp i muszę przyznać, że #qt wraz ze swoim qtCreatorem robią świetną robotę.

Jak ktoś szuka IDE do Cpp to qtCreator bardzo. Szybko, łatwo, miło i przyjemnie. Podpowiada, koloruje składnie(nawet całe bloki wyznacza), współgra z git. No syćko jest.

#programowanie #ide #polecam
Pobierz anonim1133 - Po ostatnich zabawach z phpStorm(niszczy wszystko, tylko drogi ;_;), ter...
źródło: comment_HZaONAEm9PsxvgqOk6n3CneuvkK1u2N2.jpg
Muszę Was poprosić o pomoc z OOP C++. Konkretnie zainstalowałem Qt Creatora, zaincludowałem:

#include <QtNetwork/QUdpSocket>


I w konstruktorze MainWindow próbuję stworzyć obiekt QUdpSocket. Przez obiekt i przez referencje:

QUdpSocket* socket; socket = new QUdpSocket;


lub

QUdpSocket socket;


Problem w tym że tak czy siak, kompilator wywala mi 'undefined reference to ...'. :< O co mu chodzi?

#programowanie #c++ #qt
@duffman: Jeśli korzystasz z domyślnych folderów instalacji to z folderu

C:/Qt/_WERSJA_/_KOMPILATOR_/bin
przekopiuj wszystkie pliki, o które program płacze (zaleƶne od uƶytych modułów Qt). Ponadto, z katalogu

C:/Qt/_WERSJA_/_KOMPILATOR_/plugins
przekopiuj folder platforms (ale wywal wszyskie niepotrzebne platformy). Jeśli uƶywasz jakichś konkretnych pluginów (np. MySQL) to przekopiuj takƶe ten folder wraz z potrzebną (niekoniecznie całą) zawartością.

Teoretycznie wystarczy, ƶe będziesz miał te pliki dostępne w zmiennej systemowej

PATH
, ale jeśli planujesz uƶywać róƶnych