簡體   English   中英

設計器中自定義窗口小部件的QT QIcon屬性

[英]QT QIcon properties for custom widget in designer

我已經為創建用於GUI菜單的QT自定義設計器小部件工作了一段時間。 這樣的想法是,您只需將其拖動到設計器中,選擇所需的幀數,每幀有多少個按鈕,等等,它就會為您生成並調整所有大小。

窗口小部件的構造方式有一些屬性,可以為所在框架配置每個按鈕。例如,在框架0中進行編輯時,可以使用button0Text字段在Button0下輸入文本,然后再次使用它來編輯位於框架0中的Button0。框架1.兩個按鈕將保留每個框架的單獨更改。

在此處輸入圖片說明

問題

通常,當我切換框架時,我的所有屬性都會更新以反映框架的狀態。 QIcon是例外。 正確的圖標將保留在實際的圖形表示中並正確構建,但是屬性列表中的文件路徑始終是該屬性最后編輯的文件路徑。 我認為這將給最終用戶帶來極大的困惑,並且我找不到解決它的方法。 因此,例如,如果我在第0幀中設置了文本和圖標,然后切換到第1幀,則屬性列表中的文本將更新以反映第1幀的狀態,但是圖標路徑名仍會顯示我在第0幀中的最后一次編輯,而不是框架1中的實際圖標。

我嘗試過的事情很簡單:

setProperty("button0Icon", getButton0Icon());

該代碼適用於文本等屬性,但不適用於圖標。 我嘗試在更改框架后立即執行它。

我也嘗試過:

#ifndef Q_WS_QWS
QDesignerFormWindowInterface *form = QDesignerFormWindowInterface::findFormWindow(this);
if(form){
    QDesignerFormEditorInterface *editor = form->core();
    QExtensionManager *manager = editor->extensionManager();
    QDesignerPropertySheetExtension *sheet;
    sheet = qt_extension<QDesignerPropertySheetExtension*>(manager, this);
    int propertyIndex = sheet->indexOf("button0Icon");
    sheet->setChanged(propertyIndex, true);
    sheet->setProperty(propertyIndex, getButton0Icon());
}
#endif

和:

int propertyIndex = this->metaObject()->indexOfProperty("button0Icon");
QMetaProperty property = this->metaObject()->property(propertyIndex);
property.write(this, QIcon());

似乎沒有什么可以更新設計器中的屬性列表。

我具有所有屬性,包括使用Q_PROPERTY在頭文件中正確聲明的所有QIcon屬性,並分配了getter和setter函數。

需要明確的是,編譯時確實會在每個幀中保留圖標值。 因此它正在起作用,對於大多數用戶來說還不清楚。

如果有人對此有任何經驗或想法,請告訴我。 謝謝。

我發現QIcon不存儲文件名/路徑。 文件名僅用於創建QIcon。 我認為這很可能是我在QIcon屬性的屬性瀏覽器中未得到任何反饋的原因。

相反,我選擇了在設計器中隱藏此屬性並添加三個新屬性。 三個QUrl屬性,每個屬性用於提供圖像文件。 我之所以使用三個,是因為我想構造一個包含正常,禁用和按下操作的模式/狀態的QIcon。

我將每個這些QUrl都保存在幕后的QStringList中,以便存儲它們的值。 然后,我使用QUrls提供的文件名構造QIcon。

我將更喜歡在設計器中使用本機QIcon,任何想法或反饋都值得贊賞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM