静态qt对话框窗口不可能

static qt dialog windows not possible?

本文关键字:不可能 窗口 对话框 qt 静态      更新时间:2023-10-16

似乎每当我试图将qt对话框屏幕"存储"到静态变量中时,程序就会崩溃。(调试错误抱怨无法在QMainApplication之前创建QPaintDevice)。

由于这个错误发生在进入main is循环之前,我认为问题出在静态变量上。(好吧,这是自上次构建以来我添加的唯一内容)。

让我首先解释一下我是如何使用它的。基本上我有一个树(源于一些外部的xml文件)。我希望显示该树中的数据。然而,根据树中的实际位置,必须以不同的方式绘制数据。(使用完全不同的对话框)。

所以我开始创建一个静态地图。这个映射将树的"位置"作为关键字(类似于"a*cd"的"regexified"-空格表示分支)。作为值,应该指向正确的对话框。

第一个想法是简单地使用指向对话框屏幕的指针。(然后,查找变量的函数只需执行对话框屏幕)。然而,这导致了上面显示的错误。

现在我开始使用一个中间代理函数,该函数只创建对话框屏幕并调用它。静态映射只保存一个指向该函数的指针。类似于:

int AskGUIFn::GenStd(const GMProject::pTree& tOut, const GMProject::pTree& tIn) const {
    std::unique_ptr<MW::GenStd> box(new MW::GenStd(&tOut, &tIn));
    return box->exec();
}

然而,这似乎非常冗长(我不仅必须创建所有的模式窗口,而且必须为每个对话框屏幕添加另一个代理函数)。有更干净的方法吗?我想阻止使用代理函数吗?

静态QWidget是不可能的-必须在QWidget之前创建QApplication对象。此外,静态变量的初始化和销毁顺序不明确也会造成问题。还要注意的是,如果你有其他窗口(如主窗口)可见,你应该始终将父窗口传递给模式对话框,否则窗口堆叠会在一些平台上显示令人讨厌的行为(禁用窗口后面的模式对话框等)

QDialog* createDialogForNodeType( const QString& type, ...tree data, QWidget* parent );