MFC程序向QT程序的移植,希望给一些思路

MFC程序向QT程序的移植,希望给一些思路,第1张

文档可以 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怎么关联起来等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10101604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存