这几天在看qt creator的源码。
一直没有看到程序在哪里调用了mainwindow的show()方法,单步调试也跟不到。似乎就是main方法的最后一句return restarter.restartOrExit(app.exec());执行完,界面就出来了。
在源代码中全局搜索.show()也没看出来。
qt creator到底是怎么把窗口显示出来的?
exec啊
exec中是启动了事件循环,并没有show主窗口,参见:https://blog.csdn.net/jiaoyaziyang/article/details/49765217
普通的qt程序写法如下:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
但qt creator的源码里,没看到w.show();这一步
程序没有直接调用mainwindows的show()方法,而是在加载过程中,调用了各个widget的show()方法。
比如:在方法void SideBarWidget::setCurrentItem(const QString &id)中,
SideBarItem *item = m_sideBar->item(id);
if (!item)
return;
removeCurrentItem();
m_currentItem = item;
layout()->addWidget(m_currentItem->widget());
m_currentItem->widget()->show();
目前理解是这样的,回头有时间再验证一下。