多文档可以 QMainWindow QMdiArea QWidget QApplication,用这些来替代,至于文档类,自己实现吧,没有现成的Doc-View框架,不过有Model View框架,概念不太一样
窗口(QWidget及其派生类)的刷新在paintEvent()函数中实现,字符串用QString,默认Unicode编码
多语言参考linguist 以及QObject::tr() ,具体的自己去看文档吧,这些信息足够你找到入口了
前人在CSDN总结的,曾经帮助过我,整理总结一下,希望也能帮助一下别人。
获得CWinApp
获得CMainFrame
获得CChildFrame
获得CDocument
获得CView
在CWinApp中
AfxGetMainWnd()
m_pMainWnd
AfxGetMainWnd()->MDIGetActive()
AfxGetMainWnd()->GetActiveFrame()
SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()
MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()
SDI:AfxGetMainWnd()->GetActiveView()
MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()
在CMainFrame中 AfxGetApp()
theApp
MDIGetActive()
GetActiveFrame()
SDI:GetActiveView()->GetDocument()
MDI:MDIGetActive()->GetActiveView()->GetDocument() SDI:GetActiveView()
MDI:MDIGetActive()->GetActiveView()
在CChildFrame中 AfxGetApp()
theApp
GetParentFrame()
GetActiveView()->GetDocument() GetActiveView()
在CDocument中 AfxGetApp()
theApp
AfxGetMainWnd() AfxGetMainWnd()->MDIGetActive()
AfxGetMainWnd()->GetActiveFrame()
POSITION pos = GetFirstViewPosition();GetNextView(pos)
在CView中 AfxGetApp()
theApp
AfxGetMainWnd() GetParentFrame() GetDocument()
在其他类中 AfxGetApp()
AfxGetMainWnd() AfxGetMainWnd()->MDIGetActive()
AfxGetMainWnd()->GetActiveFrame()
SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()
MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()
SDI:AfxGetMainWnd()->GetActiveView()
MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()
理一理MFC的这几个类的关系,可以很容易明白上面的这些乱七八糟的逻辑。
App是应用域,所有的域中的东西都可以通过全局函数访问到它。
MainFrame是主框架,也基本可以用全局函数访问到。
MainFrame下是若干个ChildFrame,ChildFrame中若干个View和Document(可能不成对),ChildFrame管理着View,View和Document进行互 *** 作。
因此整体框架就出来了,一般除了直接应用的关系都可以通过MainFrame-->Active ChildFrame-->Active View-->Document这条线进行访问,这应该叫什么来自?万能方法吧^_^。
恕我懒惰,不愿意画一个更详细的图解,凑合着看看吧。
楼主写的代码基本是正确的,那个ASSERT报错多半是应为你的文档和视图没有正确关联。关联文档和视图需要使用CMultiDocTemplate 或者 CSingleDocTemplate ,这个在InitInstance的时候就应该做了。
一般会是这种形式:
// 注册应用程序的文档模板。文档模板
// 将用作文档、框架窗口和视图之间的连接
CSingleDocTemplate pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CLearnCGALDoc),//注意文档类型
RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口
RUNTIME_CLASS(CLearnCGALView));//注意视图类型
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
只有关联了正确的类型那个IsKindOf才会返回TRUE
以上就是关于MFC程序向QT程序的移植,希望给一些思路全部的内容,包括:MFC程序向QT程序的移植,希望给一些思路、在Visual C++设计中,单文档应用程序中常用的MFC类如何相互获得类的指针(如CView类获得CDoc类的指针等、VC2005中Cview和Doc怎么关联起来等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)