五、日志栏与DockWidget
QDockWidget是QT中一个使用方便但又实用的控件,稍微大一点的项目都会使用它,只需要简简单单几句话就可以做出很酷的效果,为什么不用?而且我相信只要你使用过一次就会对它爱不释手。
在基本需求里,我们提出日志栏必须能够自由拖动,而且可以嵌入窗体,所以日志栏就得使用了一个QDockWidget,功能控件这一块很简单,只是不断地添加相应的日志信息,所以我使用QListWidget来显示日志信息,如果你有什么更好的建议,不妨告诉我,谢谢。
QDockWidget的申请很简单。
在头文件中加入:
CPP中加入:
行一是新建一个标题栏为Log的DockWidget,指定this为父Widget。
行二是指定这个Dock的允许挂接的区域,现在指定的是下部。你可以通过|的形式来指定多区域,比如
Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea|Qt::BottomDockWidgetArea。
行三是把DockWidget添加进窗体,这里提供了一个标志,这个标志指的是初始默认位置。
就这样,一个DockWidget就出来了,够简单吧,我们还可以把DockWidget的QAction取出来,放在工具栏和菜单里面去,只要通过以下代码:
行一是取得QAction。
行二是设置QAction快捷键。
行三是设置QAction图标。
然后把QAction添加进你的菜单或工具栏。
m_pDockMenu-> addAction(logAction);
接下来,要在DockWidget里面加入QListWidget来实现日志功能。方法也很简单。
在头文件中加入:
在Cpp中加入:
行一是新建一个List,父类是LogDock。
行二是设置LogDock的主部件是这个List。
然后我们要写一个函数让系统可以把新日志放进去。函数代码如下:
好了,我们只要使用这个函数就可以在List中写入日志了,你也可以适当地扩展一下,比如说图标加文本的方式。
如何在文本中加入日志呢?我这里也提供两个函数。
第一个函数是清空日志文件。
第二个函数是写入日志。
这节最后来说一下QT的内存管理,可能一路看下来,之前都没提过delete吧,其实这一切QT都帮我们做好了,QT的内存管理你只要记住一句话,有父的Widget就不用显式删除,如果没有添加进父的Widget,new 了之后一定要显式删除哦,不然会内存泄漏。