2012-08-27 138 views
0

我已經開始再次與Qt合作。我們想要做的是自動生成圖形用戶界面。因此,我仔細研究了.ui文件格式(這是一種基於XML的文件格式)。這些文件由Qt Designer生成,但可以通過任何其他軟件輕鬆創建。這部分工作到目前爲止。Qt自定義小部件與自定義項目 - Qt設計器/ uic

但是:我們想添加一些自定義小部件。創建自定義小部件也並不困難。一些好的網站存在:Creating Custom Widgets for Qt Designer,Using Custom Widgets with Qt Designer,(更多超鏈接被阻止),...

我的問題是:你如何實現顯示自定義項目的自定義小部件。我們舉一個例子。我們有一個QComboBox和一個QSpinBox。組合框具有三個項目

  • C.

當選擇 「A」 我想要的紡紗器的最低設置爲1,maxiumum設置爲9;當選擇「B」時,旋轉箱的最小值應該設置爲10,並且其最大值爲99;選擇「C」應該將spinbox的最小值設置爲100,最大值設置爲999.這是如何正確完成的?

此刻我將數據設置在QTableWidget中,這是一個輔助類。每行有三列/單元格:

item | min | max 
-----+------+----- 
    A | 0 | 9 
    B | 10 | 99 
    C | 100 | 999 

而且我有我的自定義小部件,其中包含QComboBox和QSpinBox。在運行時,我告訴自定義小部件從QTableWidget獲取數據/模型,並通過名爲setFriendContainer()的方法複製到它自己[它甚至是一個公共槽,它應該連接到自動發出的tablewidget的信號]。之後桌面小工具不再需要了!我甚至不想將它展示給用戶(這就是爲什麼一些尺寸屬性設置爲0;但部分尺寸屬性仍然可見)。

我認爲這並不是一個乾淨的方式來實現它。什麼會更好/替代?這些項目也會生成並應包含在相同的.ui文件中。當然,它可以在運行時從另一個文件加載它,但我認爲這不是一個選項。你認爲我的解決方法是好的,還是太「醜」?有一些例子,你可以看到如何添加單個自定義屬性,但我認爲這是不同的 - 如果你想添加整個容器(列表或項目表,無論什麼)。但將它包含在.ui文件中甚至可能違背整個模型/視圖概念?!

任何幫助歡迎!

感謝, 馬蒂亞斯

回答

1

我已經將數據添加到XML格式的自定義屬性中。數據存儲了小部件中使用的一些編碼信息。有動態的properties是很好的。

0

記住,你是在處理與小部件的屬性。 UI文件只不過是小部件,它們的屬性以及它們在層次結構中彼此之間的關係的描述。自定義小部件與QPushButton或QComboBox到Designer等類似。重要的是要以UI文件中可理解的方式對自定義小部件的屬性進行編碼。

您最好通過查看UI schema並確保您的小部件可以在有效文件中描述。之後,只需確保您的屬性行爲正確(即,您可以按任意順序設置屬性並獲得相同的結果)。你如何實現這個小部件真的取決於你(製作你自己的數據結構,不要拖拽一個「不可見」的樹部件)。