c++ - QUiLoader 从 QWidget* 转换为 QDialog*,可能吗?

标签 c++ qt c++11 qt4 qt5

看来我在这里遗漏了什么。难道不能从 QWidget 转换为 QDialog 吗?

QUiLoader loader;
QFile file("../../plugin/ui/settings.ui");
file.open(QFile::ReadOnly);
m_settingsDialog = qobject_cast<QDialog*>(loader.load(&file));
if(!m_settingsDialog)
    qDebug() << "invalid!";
file.close();

我一直认为它无效。

最佳答案

显然您的 settings.ui 文件没有描述 QDialog,因为加载器没有创建一个(因此动态转换失败)。

如果您控制 ui 文件并且是唯一的用户,您可以更改它以定义一个 QDialog

如果你不这样做,你可以将加载的小部件嵌入到 QDialog 中:

m_settingsDialog = new QDialog;
QWidget settingsWidget = loader.load(&file);
settingsWidget.setParent(m_settingsDialog);

关于c++ - QUiLoader 从 QWidget* 转换为 QDialog*,可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36115642/

相关文章:

c++ - 使用 foreach 循环连续迭代两个结构的简单方法

c++ - 我正在使用 Qt GUI c++ 开发 POS 系统项目

c++ - 如何检查Qt中的sqlite中是否存在列

当 push_back 新元素到 std::vector 时,C++ 引用发生变化

c++时间戳与毫秒

c++ - 在 CodeLite 中链接 Qt

macos - 使用 C++11 的 CUDA 6.0 的 CMake 脚本

c++ - 如何确保文件将在运行结束时关闭

c++ - 无法实现接口(interface)的 [[deprecated]] 方法

c++ - 可以做些什么来优化离开方法和清空局部变量堆栈所花费的时间?