QUiLoader 从 QWidget* 转换为 QDialog*,可能

QUiLoader cast from QWidget* to QDialog*, possible?

本文关键字:QDialog 可能 转换 QWidget QUiLoader      更新时间:2023-10-16

看来我在这里错过了一些东西。应该不能从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);