gpt4 book ai didi

c++ - 设计器中自定义小部件的 QT QIcon 属性

转载 作者:太空宇宙 更新时间:2023-11-04 13:30:21 24 4
gpt4 key购买 nike

我已经为 GUI 菜单创建 QT 自定义设计器小部件工作了一段时间。这个想法是您只需将它拖到设计器中,选择您想要的帧数、每帧按钮的数量等,它就会为您生成一切并调整其大小。

小部件的结构方式有一些属性可以为您所在的框架配置每个按钮。例如,您可以使用 button0Text 字段在第 0 帧中编辑时在 Button0 下输入文本,然后再次使用它来编辑 Button0在第 1 帧中。两个按钮都将保留每个帧的单独更改。

enter image description here

问题

通常,当我切换框架时,我的所有属性都会更新以反射(reflect)框架的状态。 QIcon 是个异常(exception)。正确的图标保留在实际的图形表示中并正确构建,但是属性列表中的文件路径始终是该属性的最后编辑的路径。我认为这会让最终用户非常困惑,而且我找不到修复它的方法。因此,例如,如果我在第 0 帧中设置文本和图标,然后切换到第 1 帧,属性列表中的文本将更新以反射(reflect)第 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 中的每一个都保存在幕后的 QStringLists 中,以便存储它们的值。然后,我使用 QUrls 提供的文件名构建我的 QIcon。

为此,我更愿意在设计器中使用原生 QIcon,欢迎任何想法或反馈。

关于c++ - 设计器中自定义小部件的 QT QIcon 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31718313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com