【问题标题】:Qt. Hide QDialog from taskbar, when call it from pluginQt。从任务栏隐藏QDialog,当从插件调用它时
【发布时间】:2012-02-05 14:21:09
【问题描述】:

我开发了一个带有插件的应用程序。每个插件都应该有自己的设置窗口(QDialog 类型)。

如果插件的设置表单包含在主项目中,我将简单地创建它,并将主表单作为父级传递,如下所述:http://developer.qt.nokia.com/doc/qt-4.8/qdialog.html#QDialog(并在谷歌结果中针对此问题)。

但是当 QDialog 在单独的插件中声明时,我认为将主窗体作为父应用程序从主应用程序传递给插件实例是丑陋和不安全的。

有什么想法吗?存根 QWidget?

【问题讨论】:

    标签: qt plugins qdialog


    【解决方案1】:

    我有个小主意。这是不同的方法,但它也可能适用于您的情况。据我了解,您正在尝试为您的应用程序创建设置管理器。例如,您可以使用QSettings 并将每个插件的设置存储在不同的子组中。例如,您有一个主应用设置和两个其他插件。

    [Main App]
    key1=val1
    key2=val2
    
    [Plugin1]
    key1=val1
    key2=val2
    
    [Plugin1]
    key1=val1
    key2=val2
    

    这样,您可以轻松地在主应用程序中构建QDialog 并更改/保存设置。反过来,主应用程序通过信号通知插件设置已更改并且需要重新加载。这样你就可以从你的插件中封装你的主应用程序。

    更新

    感谢您的快速反馈。我提出的方法是以 MainApplication 为中心,但可以重新设计为去中心化。由于QSettings 是特定于应用程序的,您的插件可以像以前一样将其设置存储在与主应用程序的一个配置中。我要做的一项修改如下。您可以在插件中创建QDialog 并修改设置,而无需让主应用了解此过程。

    【讨论】:

    • 每个插件都应该有自己的设置窗口。因此,如果主应用程序将创建插件自己的设置窗口,它应该知道它。 IE。插件应包含在主项目中。那不是我的情况。
    • 唯一的问题是settigs窗口的任务栏按钮。
    • @MaximKorobov 不一定。您可以将您的应用程序与具有传统信号/插槽机制的插件接口,以使插件了解设置更改。
    • 谁会以你的方式创建新插件的设置窗口?
    • 我明白了。是的。现在我明白你了。我将从这种方式开始,但切换到“让插件控制它自己的设置”(不保存 - 当用户单击确定时,插件将新设置告诉主窗口,将其保存到 XML)方法。不幸的是,插件设置不仅可以更改文本框、单选按钮和复选框,还可以通过自定义编辑器进行更改。假设用户可以从颜色框中选择颜色。因此,当主窗口准备新设置时,它应该询问插件关于编辑器类型(3 个颜色框的数组)、它们在设置表单布局上的位置、标签位置和文本。
    【解决方案2】:

    好的,我将按照之前的建议创建存根 QWidget:

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

    所以现在对话框不会在任务栏上显示按钮。此外,不会出现新窗口。

    【讨论】:

      猜你喜欢
      • 2011-05-02
      • 1970-01-01
      • 2020-06-09
      • 2015-12-18
      • 2012-01-04
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多