1. 关于c++中继承多态virtual和override的几点总结。
  • 子类可以直接使用基类中的protected下的变量和函数。
  • 基类函数没加virtual,子类有相同函数,实现的是覆盖。用基类指针调用时,调用到的是基类的函数;用子类指针调用时,调用到的是子类的函数。
  • 基类函数加了virtual时,实现的时重写。用基类指针或子类指针调用时,调用到的都是子类的函数。
  • 函数加上override,强制要求子类相同函数需要是虚函数,而且必须重新实现,否则会编译报错。
  • 子类的virtual可加可不加,建议加override不加virtual。
  • 基类中的纯虚函数(virtual void play() = 0;)在基类中无需在cpp中实现,但是必须在子类实现,否则编译报错。
  • 继承多态最大的好处就是提炼共性,将通用的变量和方法信号等,全部放在基类,子类负责实现自己需要的特殊的部分即可。
  1. 关于 QTableView、QTableWidget 悬停整行选中效果,网上大多数都是针对 QTableWidget 的实现,针对 QTableView 的也都是通过委托或者重新painter实现。
  • 前提:设置选中单元格自动选中整行,tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
  • 安装事件过滤器,识别到当前坐标处的数据模型,然后设置当前模型为鼠标悬停处的模型即可。这个取巧的办法可以节省大量的工作。
  • 无论 QTableView、QTableWidget 都用此方法都可以。
  1. Qt中如何避免和第三方的signals、slots等关键字冲突。
  • 第一步:在pro中加上 CONFIG += no_keywords 。
  • 第二步:项目中之前所有的 signals 改成 Q_SIGNALS,slots 改成 Q_SLOTS 等。
  • 第三步:彻底重新编译项目,这样就关键字不冲突了。
  1. pro中区分不同的操作系统及硬件平台。
win32 {}
unix {}
//Qt5可以直接用 linux{} Qt4切记需要用 unix:!maxc{}
unix:!maxc{}
linux {}
maxc {}
android {}
wasm {} //表示64位平台
contains(QT_ARCH, x86_64) {}
//表示arm平台
contains(QT_ARCH, arm) || contains(QT_ARCH, arm64) {}
//万能办法直接切换到套件打印下 QT_ARCH 看下什么字符
message($$QT_ARCH)
  1. 在显示视频画面位置的时候,一般会有三种机制作为参考,自动调整(画面尺寸大于显示控件尺寸则等比例缩放,否则原图显示)、等比例缩放、拉伸填充。Qt中图片类QImage都提供了缩放策略的参数设置,比如Qt::KeepAspectRatio表示等比例缩放,但很多时候我们需要的是设置控件的大小,其实QSize类就提供了对应的方法scale专门解决这个问题,这个方法很容易被忽视。
//传入图片尺寸和窗体区域及边框大小返回居中区域
static QRect getCenterRect(const QSize &imageSize, const QRect &widgetRect, int borderWidth = 2, bool alwaysScale = true)
{
QSize newSize = imageSize;
QSize widgetSize = widgetRect.size() - QSize(borderWidth * 2, borderWidth * 2); //alwaysScale = false 表示只有尺寸超过窗体尺寸才缩放否则就原图尺寸
if (alwaysScale) {
newSize.scale(widgetSize, Qt::KeepAspectRatio);
} else if (newSize.width() > widgetSize.width() || newSize.height() > widgetSize.height()) {
newSize.scale(widgetSize, Qt::KeepAspectRatio);
} int x = widgetRect.center().x() - newSize.width() / 2;
int y = widgetRect.center().y() - newSize.height() / 2;
return QRect(x, y, newSize.width(), newSize.height());
} //传入图片尺寸和窗体尺寸及缩放策略返回合适尺寸的图片
static void getScaledImage(QImage &image, const QSize &widgetSize, bool alwaysScale = false, bool fast = true)
{
//alwaysScale = false 表示只有尺寸超过窗体尺寸才缩放否则就原图尺寸
if (alwaysScale) {
image = image.scaled(widgetSize, Qt::KeepAspectRatio, fast ? Qt::FastTransformation : Qt::SmoothTransformation);
} else if (image.width() > widgetSize.width() || image.height() > widgetSize.height()) {
image = image.scaled(widgetSize, Qt::KeepAspectRatio, fast ? Qt::FastTransformation : Qt::SmoothTransformation);
}
}

国内站点:https://gitee.com/feiyangqingyun

国际站点:https://github.com/feiyangqingyun

Qt开发经验小技巧231-235的更多相关文章

  1. Qt开发经验小技巧81-90

    Qt中的QColor对颜色封装的很完美,支持各种转换,比如rgb.hsb.cmy.hsl,对应的是toRgb.toHsv.toCmyk.toHsl,还支持透明度设置,颜色值还能转成16进制格式显示. ...

  2. Qt开发经验小技巧61-70

    很多人问Qt嵌入式平台用哪个好,这里统一回答(当前时间节点2018年):imx6+335x比较稳定,性能高就用RK3288 RK3399,便宜的话就用全志H3,玩一玩可以用树莓派香橙派. 对于大段的注 ...

  3. Qt开发经验小技巧41-50

    如果使用sqlite数据库不想产生数据库文件,可以创建内存数据库. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); ...

  4. Qt开发经验小技巧71-80

    在我们使用QList.QStringList.QByteArray等链表或者数组的过程中,如果只需要取值,而不是赋值,强烈建议使用 at() 取值而不是 [] 操作符,在官方书籍<C++ GUI ...

  5. Qt开发经验小技巧51-60

    在某些http post数据的时候,如果采用的是&字符串连接的数据发送,中文解析乱码的话,需要将中文进行URL转码. QString content = "测试中文"; Q ...

  6. Qt开发经验小技巧31-40

    代码判断MSVC编译器版本. if (_MSC_VER == 1800) MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) MSVC++ 12.0 _ ...

  7. Qt开发经验小技巧21-30

    如果出现Z-order assignment: is not a valid widget.错误提示,用记事本打开对应的ui文件,找到为空的地方,删除即可. 善于利用QComboBox的addItem ...

  8. Qt开发经验小技巧11-20

    获取类的属性 const QMetaObject *metaobject = object->metaObject(); int count = metaobject->propertyC ...

  9. Qt开发经验小技巧1-10

    当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它,有时候用QTime ...

  10. Qt开发经验小技巧合集

    一.开发经验总结 当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它, ...

随机推荐

  1. 在 KubeSphere 部署 Wiki 系统 wiki.js 并启用中文全文检索

    作者:scwang18,主要负责技术架构,在容器云方向颇有研究. 背景 wiki.js 是优秀的开源 Wiki 系统,相较于 xwiki ,功能目前性上比 xwiki 不够完善,但也在不断进步. Wi ...

  2. redis的主从复制master/slaver

    什么是Redis的复制 ​ 就是我们常说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主. 复制原理 Slave启动成 ...

  3. Nuxt.js 应用中的 pages:extend 事件钩子详解

    title: Nuxt.js 应用中的 pages:extend 事件钩子详解 date: 2024/10/25 updated: 2024/10/25 author: cmdragon excerp ...

  4. 3.13 Linux建立软硬链接文件(ln命令)

    如果要想说清楚 ln 命令,则必须先解释下 ext 文件系统(Linux 文件系统)是如何工作的.我们在前面讲解了分区的格式化就是写入文件系统,而我们的 Linux 目前使用的是 ext4 文件系统. ...

  5. luckysheet 初始化数据 以及 sheet显示数据

    主要说明属性 表格初始化时使用一维数组格式的 celldata,初始化完成后转化为二维数组格式的data作为存储更新使用,celldata不再使用. 如果需要将data拿出来作为初始化数据,则需要执行 ...

  6. JAVA 两个时间 相差的 小时,天数,分钟

    long nd = 1000 * 24 * 60 * 60; //每天毫秒数 long nh = 1000 * 60 * 60; //每小时毫秒数 long nm = 1000 * 60; //每分钟 ...

  7. TAMAYA

    TAMAYA 挺有意思的维护题. 题面 n个小夫坐成一排,每个小夫有一个真实值vi.小夫们有m场聚会,第i次聚会会在编号为 [li, ri] 的小夫中举办. 聚会之后,这些小夫的真实值会变为他们之中的 ...

  8. 使用免费的SVN服务器

    在本地环境中安装SVN window版本自行搜索图文教程. linux版本(以我的 ubuntu 为例子) 我尝试直接敲SVN svn 报错 Command 'svn' not found, but ...

  9. SQLSERVER 2019数据库(可疑) 数据修复案例

    2019 数据库 , 在正常使用过程中 , 服务器突然断电 , 重新启动服务器后 , 数据库变为(可疑). [数据恢复故障分析] 由于数据库在正常读写操作过 , 服务器突然断电 , 导致数据库无法把所 ...

  10. 详解 Eclipse 中的快速 Java 编码(代码模板)

    http://hi.baidu.com/twlk28/blog/item/f3ca4d905f1c6696a877a462.html 简介: Eclipse 提供了通过定义和使用代码模板来提高工作效率 ...