今天公司上一个新的项目,要做一个类文本编辑器。我开始苦逼的做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了
感谢伟大的程序猿门…