2011-11-17 66 views
9

這看起來可能是一個很奇怪的問題,但是可以從Qt對象生成一個Qt設計器表單(.ui),也就是說可以繼承QWidgetQt對象/類到Qt ui文件

我的計劃是在代碼中構建一個簡單的動態表單,當用戶選擇他們想要的東西時,例如字段,控件類型,然後轉儲出一個.ui文件,以便他們可以在需要之後調整佈局。

該代碼將使用QUiLoader類重新加載ui文件並顯示修改或不是ui文件。

+1

我很想擁有該工具,將大量的Qt-Designer手工製作的widget創建代碼轉換爲.ui文件。我之前就問過Qt開發人員,我想 - 那時的答案是'不'。我很想知道它是否成爲可能。 –

+0

該主題已於2011年3月在[Qt中心論壇帖子]中討論過(http://www.qtcentre.org/threads/39911-How-to-create-.ui-file-from-hand-written-header-和源文件只)。一個人說他們可以進行轉換,收費,但沒有提到可用的工具。 –

+0

@Clare Macrae:我認爲Qt Center論壇帖子是爲了直接解析源代碼以產生.ui文件(靜態),而OP則強調了通過用戶交互構建簡單表單的動態,並堅持將結果作爲一個.ui文件(一個表單設計器?)。 – menjaraz

回答

-1

不是這樣。正如你記得的,UI文件是在compilet-me生成合適的.cpp代碼的源代碼。 Gui加載器是點對實現模式的一部分,這有助於減少編譯時間。

+0

.ui文件只是描述小部件層次結構的xml。 – Tyr

+0

是的。但是在編譯過程中它有什麼作用? –

+0

鑑於問題與使用UiLoader動態加載表單有關,它們的作用是作爲外部數據文件進行分析,以在運行時創建匹配控件。 – Tyr

1

由於QWidget繼承自QObject,它將獲得QObject提供的所有動態屬性檢查。 QObject(和QWidgets)也自然地將它們自己排列成樹(參見QObject :: parent和QObject :: children)。通過遵循小部件樹並獲取每個小部件的屬性,可以生成一個xml .ui文件,其中包含有關每個控件的基本信息。

工作出從預先建立的形式的信號/槽連接可能會比較麻煩一些,因爲似乎沒有什麼辦法讓他們的信息之外的QObject :: dumpObjectInfo但你描述的程序在你的問題中,很容易以其他方式跟蹤他們。

0

讓我來澄清一下,Qt Designer有一個WYSIWYG用戶界面,它以xml格式創建Qt Designer表單,然後在編譯時將其轉換爲C++代碼。你問是否可以倒退呢?

是的,我認爲這是可能的,因爲Qt設計器形式只是xml無論如何。您可以創建一個接受C++代碼的應用程序,特別是用於完整聲明類的代碼,然後將該類的PROPERTIES轉換爲其對應的xml代碼。這將涉及很多工作,在這一點上,我個人不再看到這一點。

編輯:這個項目將需要你反向工程Qt設計師。但是,是的,這是非常可能的。

2

Qt的內省工具GammaRay可以從AUI(在檢測中的應用)對話保存到.ui文件的最新版本,IIRC。