Qt.Скрыть QDialog из панели задач, когда вызываете его из плагина - PullRequest
1 голос
/ 05 февраля 2012

Я разрабатываю приложение с плагинами. Каждый плагин должен иметь свое собственное окно настроек (тип QDialog).

Если форма настроек плагина была включена в основной проект, я просто создам ее, передав основную форму в качестве родительской, как указано здесь: http://developer.qt.nokia.com/doc/qt-4.8/qdialog.html#QDialog (и в результатах поиска Google для этой проблемы).

Но когда QDialog объявлен в отдельном плагине, я думаю, что уродливо и небезопасно передавать основную форму в качестве родителя из основного приложения в экземпляр плагина.

Есть идеи? Заглушка QWidget?

Ответы [ 2 ]

1 голос
/ 05 февраля 2012

У меня есть маленькая идея. Это другой подход, но он может работать и в вашем случае. Насколько я понимаю, вы пытаетесь создать менеджер настроек для своего приложения. Например, вы можете использовать QSettings и сохранять настройки для каждого плагина в другой подгруппе. Например, у вас есть настройки основного приложения и два других плагина.

[Main App]
key1=val1
key2=val2

[Plugin1]
key1=val1
key2=val2

[Plugin1]
key1=val1
key2=val2

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

обновление

Спасибо за быстрый отзыв. Подход, который я предложил, ориентирован на MainApplication, но его можно изменить, чтобы он был децентрализован. Поскольку QSettings зависит от приложения, ваши плагины могут сохранять свои настройки в одной конфигурации с основным приложением, как и раньше. Одна из модификаций, которую я бы сделал, заключается в следующем. Вы можете создать QDialog в своем плагине и изменять настройки без необходимости, чтобы основное приложение было осведомлено об этом процессе.

0 голосов
/ 19 февраля 2012

Хорошо, я бы просто создал заглушку QWidget, как предлагалось ранее:

QWidget *a = new QWidget();
settingsForm = new OpenFolderSettings(a);
...
delete settingsForm;
delete a;

Так что теперь диалог не показывает кнопку на панели задач. Также не появляется новое окно.

...