Qt开发经验小技巧231-235

2022-08-05  本文已影响0人  feiyangqingyun
  1. 关于c++中继承多态virtual和override的几点总结。
  1. 关于 QTableView、QTableWidget 悬停整行选中效果,网上大多数都是针对 QTableWidget 的实现,针对 QTableView 的也都是通过委托或者重新painter实现。
  1. Qt中如何避免和第三方的signals、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

上一篇 下一篇

猜你喜欢

热点阅读