您的位置:首页 > 产品设计 > UI/UE

QuiLoader 动态加载 QMainWindow

2016-03-21 00:03 627 查看
今天公司上一个新的项目,要做一个类文本编辑器。我开始苦逼的做ui界面

设计好界面后,利用QUiLoader进行动态加载MainWindow.ui

void IDEMainWindow::InitiMainWidget()

{

QUiLoader loader;

QFile file(“:/ui/res/ui/MainWindow.ui”);

if(!file.open(QFile::ReadOnly))

{

logger()->debug(tr(“Failed to open UI file.”));

return;

}

QWidget *pWidget = loader.load(&file,this);

file.close();

QVBoxLayout layout = new QVBoxLayout;
layout->addWidget(pWidget);
setLayout(layout);


}

在构造函数里调用,编译,运行,我去,怎么木有。检查代码、重新编译,还是木有出现设计好的ui。

哎,Google是个好基友,经过搜索后才发现原来看过的一帖子http://mobile.51cto.com/symbian-272128.htm

楼主是这么总结的,QUiLoader动态加载有两个限制:

限制1:UI 必须是QWidget窗体或QFrame部件,不能是其他类型,如QDialog,QMainWindow

限制2:UI 的顶层窗体必须具有布局,也就是窗体的布局不能是“打破布局”这一项。

如果不满足上述两个限制,QUiLoader是不能加载这样的UI文件的。

so ga,但是,伟大的、苦逼的程序猿们,怎么可能让QUiLoader动态加载怎么好的方法应用不到QMainWindow呢,

所以,再去Google进行查找!

果然,前辈高人,大有人在。看到了一个Loading a QMainWindow With QUiLoader,再次感谢Google

http://www.mail-archive.com/pyqt@riverbankcomputing.com/msg25912.html

我去,URL被和。谐了,但是难得到我们广大的翻。墙爱好者吗。原文如下

def setupUi(self, MainWindow):

loader = QUiLoader()

file = QFile(“…”)

file.open(QFile.ReadOnly)

centralwidget = loader.load(file, self)

centralwidget.setWindowFlags(Qt.Widget)

self.setCentralWidget(centralwidget)

It works, but the real centralWidget is nested into the main QMainWindow centralWidget, so to set my own centralWidget, I have to do:

self.centralWidget().setCentralWidget(…)

There is a better way to load a QMainWindow from a ui file via QUiLoader? Thank you!

原来如此,修改了代码,如下:

void IDEMainWindow::InitiMainWidget()

{

QUiLoader loader;

QFile file(“:/ui/res/ui/MainWindow.ui”);

if(!file.open(QFile::ReadOnly))

{

logger()->debug(tr(“Failed to open UI file.”));

return;

}

QWidget *pWidget = loader.load(&file,this);

file.close();

if(pWidget)

{

pWidget->setWindowFlags(Qt::SubWindow);

}

setCentralWidget(pWidget);

}

编译,运行,o了

感谢伟大的程序猿门…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ui 界面