初创公司,没有像大公司那样的技术积累,很多东西需要自己从头干起,其中较大的一块就是工具。想起刚刚参加工作半年的那会儿,老板为了说服我写工具,说让我进工具组是培养我,写了一个数据校验工具后,我就死活再也不肯开发工具了,硬要继续写服务端程序。现在真是轮回,这次我是发现,我们实在是太需要工具了,于是决定自己写工具来提高公司的游戏开发效率。
于是,首先用本周时间,开发了一个用于编辑游戏layout的工具,使用的UI库是Qt。这个虽然是在公司有在MacOS下使用工具的需求下做出的选择,但是还是不得不说,对比3年前学习和使用MFC的经历,总体来说是心情愉快了很多。
Qt的学习断断续续,虽然我的博客中有个Qt的分类,但是在之前其实了解的还是比较浅的,除了大概翻看过《C++ GUI Qt 4编程》(第二版)一书,用Qt结合OpenGL做了一些小的动画demo,基本没有开发过啥实际的东西。说起来这还是第一次在工作中使用到Qt,中间多少还是走了一些弯路,也碰到过一些问题,这里大概总结一下,想到哪就说到哪了。
使用Qt的时候,还走了一些弯路,一部分也算是自己了解Qt不深入,一部分应该也算是Qt的设计问题。
Model的自定义使用:
insertRows,removeRows需要自己实现,大部分时候仅仅需要:
beginInsertRows(parent, row + 1, row + count);
endInsertRows();
return true;
和
beginRemoveRows(parent, row , row + count - 1);
endRemoveRows();
return true;
但是还是需要自己实现,不然的话实现是空的,那么是没有删除和添加效果的。相当不理解,那rowCount是干啥用的?其实应该只需要update/refresh一下就好了。或者,emit一下Qt中已经有的rowsInserted或者rowsRemoved signal也就好了,但是在rowsInserted,rowsRemoved信号的文档中明确的表示这两个消息不允许子类调用的,“It can only be emitted by theQAbstractItemModelimplementation, and cannot be explicitly emitted in subclass code.”
而insertRow和removeRow是调用insertRows和removeRows来实现的,(文档如此描述)所以我们不需要实现了。不知道哪种逻辑更为正确,插入多行是多次插入呢,(所以插入多行可以通过多次调用插入一行实现)还是插入一行是插入多行的特殊情况呢?(就如同Qt这样反过来实现)
beginMoveRows和endMoveRows系列就更有意思了,因为没有moveRows用于重载..............那么,这些protected的函数什么时候调用呢?
最后找到了layoutChanged信号,发现只需要在改动后emit此信号即可刷新。并且insert和remove都可以实现。原来........Qt设计者眼中的update/refresh名字叫做layoutChanged.........相当晕。
使用QAction作为快捷键的时候,在一个列表空间中创建,发现无论如何都无法出发triggered信号,最后只能在全应用程序的菜单中添加action了事........这个比较困惑,也就是说没有局部快捷键?
对Qt的了解有限,使用一周,为了防止同一个坑掉进去两次,特写下一些东西作为回头查阅的资料,觉得不对的请提出来。
分享到:
相关推荐
基于Qt使用C++实现图书管理系统源码 基于Qt使用C++实现图书管理系统源码 基于Qt使用C++实现图书管理系统源码 基于Qt使用C++实现图书管理系统源码 基于Qt使用C++实现图书管理系统源码 基于Qt使用C++实现...
Qt下使用cppJson代码,可以适合嵌入式环境
一个QT使用MFC的例子,示例为QT工程,其中引入MFC库,使用CString类,MessageBox方法进行了验证。示例工程为QT4+VS2013。此方式在QT3,QT4,QT5和VC6,VS2013,VS2015,VS2018中亦可使用。
Qt使用PDFium库操作pdfQt使用PDFium库操作pdfQt使用PDFium库操作pdf
Windows下Qt使用openCV的demo,在https://blog.csdn.net/u012902367中《Qt 使用openCV》一文中有介绍。
Qt使用QtWebApp搭建Http服务器实现文件下载
QT5中调用zeroMQ,使用QJsonDocumentn类,发送json数据
Qt使用vlc多窗口播放同一个视频,Qt使用vlc多窗口播放同一个视频
网上一直搜不到Windows下QT使用thrift的例子,自己整了个 QT版本 5.8.0 Boost版本 boost_1_61_0 Thrift版本 thrift-0.10.0
Qt Modbus协议使用
个人项目中QT3转QT4经验总结。 主要总结qt3和qt4架构上的区别,以及qt3转qt4的方法步骤和技巧。
Qt使用Poppler-qt5操作PDF文件 原文 http://blog.csdn.net/hellogdut/article/details/22827431
Qt使用Google Test项目,根据Qt 使用Google Test单元测试编写
1、Qt4中学习使用QtCharts绘图五:绘制折线图 2、实例带源码工程
通过Qt 读取 FreeType 字体 轮廓线,然后动画绘制轮廓线字!
前言Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象...
qt使用教程
Qt如何使用lib库封装界面一(Qt5动态链接库创建和使用)
qt的子窗口控件使用实例,运行环境是QT5,供大家参考使用
QT中使用QNetworkAccessManager类进行POST数据,该例子实测可以运行,附上客户端与服务器端的代码