繁体   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