博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt常用代码段收集---未完待续
阅读量:4298 次
发布时间:2019-05-27

本文共 5295 字,大约阅读时间需要 17 分钟。

 

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

 

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);    //所有控件均视为windowQWidget::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版本
d3d11va DXVA2 / D3D11VA
这些是标准的Windows API,由英特尔图形驱动程序实现,以支持视频解码。
vaapi linux用
vdpau macos用

 

 

文件夹选择对话框:

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()<

 

耗时计算:

#include
QTime startTime = QTime::currentTime();QTime stopTime = QTime::currentTime();int elapsed = startTime.msecsTo(stopTime);qDebug()<<"QTime.currentTime ="<
<<"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或者OutputDebugString21. connect(SomeObj, SIGNAL(foo()), SIGNAL(bar()):通过一个signal自动触发另一个signal。

 

美化:

 

  :  生成GIF,不错

 

 

转载地址:http://banws.baihongyu.com/

你可能感兴趣的文章
相同程序不同进程下实现数据共享
查看>>
不同进程通过共享内存实现数据共享
查看>>
C++之POD数据类型
查看>>
C++中的struct与class
查看>>
C++之const关键字
查看>>
C++之函数返回指针
查看>>
C++之extern关键字
查看>>
C++之static关键字[转]
查看>>
类中成员函数的重载、覆盖与隐藏[转]
查看>>
C++之this指针
查看>>
C++之引用类型
查看>>
C++之virtual关键字
查看>>
C++之强制转换运算符[转]
查看>>
text段、data段、bss段、堆和栈
查看>>
OSI七层网络模型
查看>>
TCP协议
查看>>
git常用命令
查看>>
git与svn的五个基本区别[转]
查看>>
HTTP协议[转]
查看>>
字典序算法[转]
查看>>