Qt开发经验小技巧合集 (10)

在继承自QAbstractItemView的控件中,比如QTableView、QTableWidget,如果文本超过对应item的宽度,则会自动省略号显示,想要快速显示完整的文本,可以在该列和下一列分割线中间双击即可,会自动自适应显示最大宽度,如果是Qt5.14或者更高版本,你会发现显示省略号的计算规则变了,如果是rtsp、http之类的开头的英文字符串,同样的列宽下,会提前就显示省略号,比如字符串 rtmp://58.200.131.2:1935/livetv/cctv1,会显示成 rtmp://... ,而在旧版本的Qt中会显示成 rtmp://58.200.131... ,很多时候我们并不想看到烦人的省略号,可以设置取消。

//取消自动换行 tableView->setWordWrap(false); //超出文本不显示省略号 tableView->setTextElideMode(Qt::ElideNone);

QVideoWidget播放视频,可能会遇到画面闪烁的情况,播放视频的窗体需要设置个属性。

QVideoWidget *videoWidget = new QVideoWidget; videoWidget->setAttribute(Qt::WA_OpaquePaintEvent);

Qt bug成千上万,这个不用大惊小怪,也基本上遇不到,大部分都是特殊极端情况特定应用场景出现,甚至你会遇到有些是debug可以release报错,有些release可以debug却报错的情况,最神奇的还有先是debug报错,然后release正常,再返回去用debug又正常,需要用release激活一下!学习编程的路本来就是一条坑坑洼洼的路,不断填坑,尽量规避坑!很多时候很多看起来的坑其实是自己没有注意细节导致的。

Qt视图中默认排序是按照字符串的ASCII排序的,如果是IP地址的话会出现192.168.1.117排在192.168.1.2前面的情况,如果要规避这种情况,一种做法是取末尾的地址转成整型再比较大小,缺点是跨网段就歇菜了,又会出现192.168.2.65出现在192.168.1.70前面,终极大法是将IP地址转成整型再比较大小。

QString QUIHelper::ipv4IntToString(quint32 ip) { QString result = QString("%1.%2.%3.%4").arg((ip >> 24) & 0xFF).arg((ip >> 16) & 0xFF).arg((ip >> 8) & 0xFF).arg(ip & 0xFF); return result; } quint32 QUIHelper::ipv4StringToInt(const QString &ip) { int result = 0; if (isIP(ip)) { QStringList list = ip.split("."); int ip0 = list.at(0).toInt(); int ip1 = list.at(1).toInt(); int ip2 = list.at(2).toInt(); int ip3 = list.at(3).toInt(); result = ip3 | ip2 << 8 | ip1 << 16 | ip0 << 24; } return result; }

在主QWidget窗体如果直接qss设置背景图片的话,预览是可见的,运行并没有效果,你需要在这个主widget上再放个widget,在新的widget上设置qss图片就行,而如果是Dialog或者QMainWindow窗体是支持直接设置qss背景图的,预览和运行效果一致。

Qt提供了qDebug机制直接输出打印信息,这个弥补了QtCreator调试很鸡肋的缺点,而且无缝对接日志钩子,使得现场运行期间按照预定的打印信息输出到日志文件,有时候在开发阶段,又不想要看到一堆堆的打印信息,最笨的做法是一行行注释掉qdebug的地方,其实还可以直接pro中加上一行来禁用整个项目的qdebug输出。

#禁用qdebug打印输出 DEFINES += QT_NO_DEBUG_OUTPUT

在使用QT_NO_DEBUG_OUTPUT关键字禁用了所有打印信息以后,可以节约不少的开销,有时候又想在禁用打印信息后,极少地方还需要看到打印信息,怎么办呢?其实QT_NO_DEBUG_OUTPUT禁用的qdebug的输出,Qt还有其他几种打印信息比如 qInfo、qWarning、qCritical,这些是不受影响的,也就是说在极少部分需要打印的地方用qInfo来输出信息就好。特别注意:qFatal打印完信息程序会自动结束。

qDebug() << "qDebug"; qInfo() << "qInfo"; qWarning() << "qWarning"; qCritical() << "qCritical"; qDebug("qDebug"); qWarning("qWarning"); qCritical("qCritical");

Qt的pro文件可以添加各种处理来使得配置更方便,比如指定输出文件路径等,这样就不会全部在一堆编译生成的临时文件中找来找去。

#禁用qdebug打印输出 DEFINES += QT_NO_DEBUG_OUTPUT #自定义define变量 可以在整个项目中使用 #pro文件可以这样判断 contains(DEFINES, videovlc) {} #代码文件可以这样判断 #ifdef videovlc DEFINES += videovlc1 videoffmpeg #关闭编译警告提示 眼不见为净 CONFIG += warn_off #指定编译生成的文件到temp目录 分门别类存储 MOC_DIR = temp/moc RCC_DIR = temp/rcc UI_DIR = temp/ui OBJECTS_DIR = temp/obj #指定编译生成的可执行文件到bin目录 DESTDIR = bin

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzxjpf.html