QT QIcon свойства для пользовательского виджета в конструкторе

Некоторое время я работал над созданием виджета QT Custom Designer для меню GUI. Идея заключается в том, что вы просто перетаскиваете его в дизайнер, выбираете количество кадров, которое вы хотите, сколько кнопок на кадр и т. Д., И он генерирует и измеряет все для вас.

В структуре виджета есть свойства для настройки каждой кнопки для фрейма, в котором вы находитесь. Например, вы должны использовать поле 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());

Ничто не может обновить список свойств в конструкторе.

У меня есть все свойства, включая все свойства QIcon, правильно объявленные в заголовочном файле с Q_PROPERTY и назначенными функциями получения и установки.

Чтобы было ясно, значения значков действительно сохраняются в каждом кадре при компиляции. Так что это функционирует, просто непонятно для большинства пользователей.

Если у кого-то есть опыт с этим или какие-либо идеи, пожалуйста, дайте мне знать. Благодарю.

1

Решение

Я обнаружил, что QIcon не хранит имена файлов / пути. Имена файлов используются только для создания QIcon. Я думаю, что это, скорее всего, причина, по которой я не получаю никакой обратной связи в обозревателе свойств для моих свойств QIcon.

Вместо этого я решил скрыть это свойство в конструкторе и добавить три новых. Три свойства QUrl, каждое из которых используется для предоставления файла изображения. Я использую три, потому что я хочу создать QIcon, который содержит режимы / состояния для нормальных, отключенных и нажатых операций.

Я беру каждый из этих QUrls и сохраняю их в QStringLists за кулисами, чтобы сохранить их значения. Затем я создаю свой QIcon, используя имена файлов, предоставленные из QUrls.

Я бы предпочел использовать для этого нативный QIcon в конструкторе, любые мысли и отзывы приветствуются.

0

Другие решения


По вопросам рекламы [email protected]