2011-11-17 20 views
9

Może to wydawać się bardzo dziwnym pytaniem, ale czy można wygenerować formularz Qt Designer (.ui) z obiektu Qt, powiedzieć coś, co dziedziczy QWidget?Obiekt/klasa Qt do pliku Qt ui

Mój plan polega na stworzeniu prostej formy dynamicznej w kodzie, gdy użytkownik wybierze to, czego potrzebuje, np. Pola, rodzaj kontroli, a następnie zrzuci plik .ui, aby mógł dostosować układ, jeśli zajdzie taka potrzeba.

Kod będzie następnie używał klasy QUiLoader do ponownego załadowania pliku ui i wyświetlenia zmodyfikowanego pliku ui.

+1

Chciałbym mieć ten obiekt, aby przekonwertować masę ręcznie tworzonego kodu kreacji widgetu pre-Qt do plików .ui. Pytałem o to wieki temu - o dewelopera Qt, jak sądzę - a odpowiedź brzmiała "nie". Chciałbym wiedzieć, czy to możliwe, odkąd to możliwe. –

+0

Ten temat został omówiony w marcu 2011 r. W [poście Qt Center] (http://www.qtcentre.org/threads/39911-How-to-create-.ui-file-from-handwritten-header- i tylko pliki-źródłowe.). Jedna osoba stwierdziła, że ​​może dokonać konwersji za opłatą, ale nie wspomniano o żadnym dostępnym narzędziu. –

+0

@Clare Macrae: Postrzegam post na forum Qt Center jako próbę bezpośredniego analizowania kodów źródłowych, aby uzyskać plik .ui (statyczny), podczas gdy OP podkreślał dynamikę budowania prostej formy poprzez interakcję z użytkownikiem i utrzymywał wynik jako plik .ui (projektant formularzy?). – menjaraz

Odpowiedz

-1

nie w ten sposób. Jak pamiętacie, plik UI jest kodem źródłowym do generowania odpowiedniego kodu .cpp w compilet-me. Gui-loader jest częścią schematu "od punktu do wdrożenia", który pomaga zredukować czas kompilacji.

+0

Plik .ui to po prostu xml opisujący hierarchię widżetów. – Tyr

+0

tak. Jaka jest rola w procesie kompilacji? –

+0

Ponieważ pytanie dotyczy dynamicznego ładowania formularzy za pomocą UiLoadera, ich rolą jest tutaj zewnętrzny plik danych, który jest analizowany w celu utworzenia pasujących formantów w środowisku wykonawczym. – Tyr

1

Ponieważ QWidget dziedziczy po obiekcie QObject, otrzymuje cały obiekt kontroli dynamicznej QObject. QObjects (i QWidgets) również w naturalny sposób układają się w drzewa (zobacz QObject :: parent i QObject :: children). Podążając za drzewem widżetów i uzyskując właściwości każdego z nich, można wygenerować plik xi .ui zawierający podstawowe informacje o poszczególnych kontrolkach.

Wypracowanie połączeń sygnał/gniazdo z wcześniej ustalonego formularza może być nieco trudniejsze, ponieważ nie istnieje żaden sposób, aby uzyskać informacje na ich temat oprócz QObject :: dumpObjectInfo, ale dla programu, który opisujesz w twoim pytaniu łatwo jest śledzić je w inny sposób.

0

Pozwól, że coś wyjaśnię, Qt Designer ma interfejs użytkownika WYSIWYG, który tworzy formularz Qt Designer w formacie xml, który jest konwertowany do kodu C++ w czasie kompilacji. I pytasz, czy można to zrobić wstecz?

Tak, myślę, że jest to możliwe, ponieważ Qt Designer Forms i tak to tylko xml. Możesz utworzyć aplikację, która akceptuje kod C++, w szczególności kod używany do pełnej deklaracji klasy, a następnie przetłumaczyć WŁAŚCIWOŚCI klasy na ich odpowiedni kod XML. Wymagałoby to wiele pracy, w której w tym momencie osobiście nie widzę już sensu.

edytuj: ten projekt wymaga inżyniera wstecznego Qt Designer. ale tak, jest to bardzo możliwe.

2

Qt-Introspekcja narzędzie GammaRay można zapisać dialogi z AUI (wniosek na podstawie inspekcji) do .ui plików w najnowszej wersji, IIRC.