Qt常用代码段收集---未完待续

 

以下代码段部分收集与网络:

 

QWidegt派生,事件重写:

 // Event handlers
    bool event(QEvent *event) Q_DECL_OVERRIDE;
    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseReleaseEvent(QMouseEvent *event);
    virtual void mouseDoubleClickEvent(QMouseEvent *event);
    virtual void mouseMoveEvent(QMouseEvent *event);
#ifndef QT_NO_WHEELEVENT
    virtual void wheelEvent(QWheelEvent *event);
#endif
    virtual void keyPressEvent(QKeyEvent *event);
    virtual void keyReleaseEvent(QKeyEvent *event);
    virtual void focusInEvent(QFocusEvent *event);
    virtual void focusOutEvent(QFocusEvent *event);
    virtual void enterEvent(QEvent *event);
    virtual void leaveEvent(QEvent *event);
    virtual void paintEvent(QPaintEvent *event);
    virtual void moveEvent(QMoveEvent *event);
    virtual void resizeEvent(QResizeEvent *event);
    virtual void closeEvent(QCloseEvent *event);
#ifndef QT_NO_CONTEXTMENU
    virtual void contextMenuEvent(QContextMenuEvent *event);
#endif
#ifndef QT_NO_TABLETEVENT
    virtual void tabletEvent(QTabletEvent *event);
#endif
#ifndef QT_NO_ACTION
    virtual void actionEvent(QActionEvent *event);
#endif
#ifndef QT_NO_DRAGANDDROP
    virtual void dragEnterEvent(QDragEnterEvent *event);
    virtual void dragMoveEvent(QDragMoveEvent *event);
    virtual void dragLeaveEvent(QDragLeaveEvent *event);
    virtual void dropEvent(QDropEvent *event);
#endif
    virtual void showEvent(QShowEvent *event);
    virtual void hideEvent(QHideEvent *event);
    virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result);
    // Misc. protected functions
    virtual void changeEvent(QEvent *);

 

常用配置:

QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);//支持高分辨率屏幕(高分屏)
QApplication::setAttribute(Qt::AA_NativeWindows);    //所有控件均视为window

QWidget::setAttribute(Qt::WA_NativeWindow);
QWidget::setAttribute(Qt::WA_Mapped);    //最小化之后界面不刷新
QWidget::setAttribute(Qt::WA_OpaquePaintEvent);//视频流widget  避免任何不必要的过度重绘背景
QWidget::setUpdatesEnabled(bool);    //设置widget不刷新

Qt::SubWindow;// Qt设置窗口不在系统的任务栏上显示

 

视频网格布局思路:

QGridLayout *gridLayout;    //类

ui->gridLayout->removeWidget(...);

ui->gridLayout->addWidget(..., row, column);

 

FFmpeg硬解码:

qsv

QSV(Quick Sync Video)是Intel的集成加速器名字,目前市面上中低端的Intel CPU都支持,一般服务器CPU都不支持

dxva2
就是DirectX Video Acceleration 2.0规范,即利用DirectX 的视频加速规范的2.0版本
d3d11vaDXVA2 / D3D11VA
这些是标准的Windows API,由英特尔图形驱动程序实现,以支持视频解码。
vaapilinux用
vdpaumacos用

 

 

文件夹选择对话框:


  QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
                                                  "./",
                                                  QFileDialog::ShowDirsOnly
                                                  | QFileDialog::DontResolveSymlinks);

 

快速转换路径(斜杠与反斜杠转换)

QString path = "C:/temp/test.txt";
path = QDir::toNativeSeparators(path); //"C:\\temp\\test.txt"


QString path = "C:\\temp\\test.txt";
path = QDir::fromNativeSeparators(path);    //C:/temp/test.txt



 

打开文件夹,并选择指定文件 

    //打开文件夹,并且选择指定文件
    QString fileName = ui->lineEdit->text();
    if(fileName.isEmpty())
        return;
    QProcess process;
    fileName.replace("/","\\");
    QString cmd = QString("explorer.exe /select,\"%1\"").arg(fileName);
    qDebug()<<cmd;
    process.startDetached(cmd);

 

耗时计算:

#include<QTime>
QTime startTime = QTime::currentTime();

QTime stopTime = QTime::currentTime();
int elapsed = startTime.msecsTo(stopTime);
qDebug()<<"QTime.currentTime ="<<elapsed<<"ms";

 

只打开文件夹,不需要选择

    QString fileName = ui->lineEdit->text();
    if(fileName.isEmpty())
        return;
    fileName.remove(fileName.split("/").last());
    QDesktopServices::openUrl(QUrl::fromLocalFile(fileName));//支持中文路径

 

Main文件模板: from liudianwu

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QFont font;
    font.setFamily("MicroSoft Yahei");
    font.setPixelSize(12);
    a.setFont(font);

#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
#if _MSC_VER
    QTextCodec *codec = QTextCodec::codecForName("gbk");
#else
    QTextCodec *codec = QTextCodec::codecForName("utf-8");
#endif
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);
#else
    QTextCodec *codec = QTextCodec::codecForName("utf-8");
    QTextCodec::setCodecForLocale(codec);
#endif

    frmMain w;
    w.showMaximized();

    return a.exec();
}

 

技巧: From liudianwu

1. Q_GADGET:不需要从QObject继承就可以使用Qt的Meta Object功能

2. Q_ENUMS:对枚举对象进行反射(reflection)

3. Q_SIGNAL:不需要signals关键字就可以将一个函数指定为singal函数

4. Q_SLOT:不需要slots关键字就可以将一个函数指定为slot函数

5. Q_FOREACH:Qt提供的关键字foreach在配置文件里面定义了no_keywords的时候就失效了,而Q_FOREACH宏无论何时都有效

6. Q_FOREVER:原因同Q_FOREACH,用法和关键字forever一样

7. qChecksum:计算基于CRC-16-CCITT算法的CRC-16校验码

8. qCompress/qUncompress:基于zlib的算法对字节缓存区进行压缩/解压,可以自定义压缩比

9. qDeleteAll:对容器或者迭代器中的每个对象进行delete操作

10. qRound/qRound64:对浮点数取整,四舍五入

11. qFuzzyCompare:线程安全的浮点数模糊比较,处理了浮点精度误差的问题

12. qVersion:获取当前正在运行的Qt的版本号

13. sender:在slot函数中调用可以获取发送该signal的对象。仅用于来自同一线程的Qt::DirectConnection连接的 signal。由于这种做法破坏了面向对象的原则,慎用!

14. QSysInfo:获取当前运行的系统信息,包括版本号等,Mac/Symbian/Windows均适用

15. QtEndian:处理不同体系架构下字节存储次序不同的问题

16. QObject::findChildren<>:找出隐藏的子对象

17. qobject_cast:不需要编译器RTTI的支持就可以实现C++标准库dynamic_cast的功能

18. QObject::deleteLater:在事件处理循环中调用,则在事件处理循环结束时删除自己;在事件处理循环外调用,则在下一个事件处理循环开始时删除自己

19. qPrintable:类似QString::toLocal8Bit()::constData(),但是更好记

20. qDebug():类似Windows下的TRACE或者OutputDebugString

21. connect(SomeObj, SIGNAL(foo()), SIGNAL(bar()):通过一个signal自动触发另一个signal。

 

美化:

 

https://icons8.com/preloaders/  :  生成GIF,不错

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值