QuiLoader 动态加载 QMainWindow

今天公司上一个新的项目,要做一个类文本编辑器。我开始苦逼的做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了

感谢伟大的程序猿门…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值