Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 设计器中自定义小部件的QT QIcon属性_C++_Qt_Plugins_Widget_Designer - Fatal编程技术网

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

C++ 设计器中自定义小部件的QT QIcon属性,c++,qt,plugins,widget,designer,C++,Qt,Plugins,Widget,Designer,我已经为GUI菜单创建了一个QT自定义设计器小部件工作了一段时间。你只需将它拖到设计器中,选择你想要的帧数,每帧有多少个按钮,等等,它就会为你生成并调整所有内容的大小 小部件的结构有一些属性,可以为您所在的框架配置每个按钮。例如,在第0帧中编辑时,可以使用button0Text字段在Button0下输入文本,然后再次使用该字段编辑第1帧中的Button0。这两个按钮将保留每个帧的单独更改 问题 通常,当我切换帧时,所有属性都会更新以反映帧的状态。奇康是个例外。正确的图标将保留在实际图形表示中并

我已经为GUI菜单创建了一个QT自定义设计器小部件工作了一段时间。你只需将它拖到设计器中,选择你想要的帧数,每帧有多少个按钮,等等,它就会为你生成并调整所有内容的大小

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

问题

通常,当我切换帧时,所有属性都会更新以反映帧的状态。奇康是个例外。正确的图标将保留在实际图形表示中并正确生成,但是特性列表中的文件路径始终是该特性的最后一次编辑路径。我认为这会让最终用户非常困惑,我没有办法解决它。因此,例如,如果我在第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
似乎没有任何内容更新设计器中的属性列表

我拥有所有属性,包括头文件中正确声明的所有QIcon属性,以及Q_属性和分配的getter和setter函数

要清楚的是,图标值在编译时确实会在每个帧中保留。因此,它正在发挥作用,只是对大多数用户来说并不清楚


如果有人有这方面的经验或任何想法,请让我知道。谢谢。

我发现QIcon不存储文件名/路径。文件名仅用于创建QIcon。我认为这很可能是我在QIcon酒店的酒店浏览器中没有收到任何反馈的原因

相反,我选择在设计器中隐藏此属性并添加三个新属性。三个QUrl属性,每个属性用于提供图像文件。我使用三个,因为我想构造一个包含正常、禁用和按下操作的模式/状态的QIcon

我将每个QURL保存在幕后的QStringLists中,以便存储它们的值。然后,我使用QURL中提供的文件名构造QIcon


我更愿意在设计器中使用本机QIcon,任何想法或反馈都将受到欢迎。

我发现QIcon不存储文件名/路径。文件名仅用于创建QIcon。我认为这很可能是我在QIcon酒店的酒店浏览器中没有收到任何反馈的原因

相反,我选择在设计器中隐藏此属性并添加三个新属性。三个QUrl属性,每个属性用于提供图像文件。我使用三个,因为我想构造一个包含正常、禁用和按下操作的模式/状态的QIcon

我将每个QURL保存在幕后的QStringLists中,以便存储它们的值。然后,我使用QURL中提供的文件名构造QIcon

我更愿意在设计师中使用本土的QIcon,任何想法或反馈都将不胜感激

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