静态qt对话框窗口不可能
static qt dialog windows not possible?
似乎每当我试图将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 );
相关文章:
- 如果不在窗口 10 中声明名为 openCV 的 openCV namedWindow,QT 图像显示将无法正常工作
- 枚举窗口不检测窗口
- C# HashSet VS C++ std::unordered_set 使用自定义类键。C++慢...不可能。如何实现 C# 的速度?
- 'generate'不是窗口头文件中'std::random_device'的成员<random>
- 为什么在C++不可能递增或进行数学运算,例如在声明为数组的变量上乘法
- fopen 与常量字符 * 从 QString 是不可能的
- 找不到窗口C++
- 使用 while 循环时不显示窗口
- <<运算符覆盖使用 g++ 而不是窗口编译
- 矢量返回常量引用,不可能向下转换
- 分配取消引用的字符指针真的不可能吗?
- C#类过程 - 控制C 应用程序,不可能读取输出
- 可能是不可能的模板参数规范/推论
- Gtkmm 3/C++,使用按钮而不是窗口关闭程序"X"
- 易失性结构 = 结构不可能,为什么?
- 矢量超出范围,将值分配给空矢量>不可能?
- 为什么不可能实例化原子对
- 一个倒梯形,但如果输入高度对于宽度来说太大,那么它应该报告,不可能("不可能的形状"是什么)
- W10上不可能使用十字架编译的libpng16-16.dll执行
- 静态qt对话框窗口不可能