网站建设实例分析,怎做连接网站,vi设计公司专业品牌,网页制作怎么上传到网站继续讲一些Qt开发中的技巧操作#xff1a; 1.QList插入操作 关于QList队列的处理中#xff0c;我们最常用的就是调用append函数添加item#xff0c;往前插入item很多人第一印象就是调用insert(0,xxx)来插入#xff0c;其实QList完全提供了往前追加item的函数prepend()、pus…继续讲一些Qt开发中的技巧操作 1.QList插入操作 关于QList队列的处理中我们最常用的就是调用append函数添加item往前插入item很多人第一印象就是调用insert(0,xxx)来插入其实QList完全提供了往前追加item的函数prepend()、push_front()方法来插入。
QStringList list;
list aaa bbb ccc;
//往后追加 等价于 append
list.push_back(ddd);
//往前追加 等价于 prepend
list.push_front(xxx);
//往后追加
list.append(ddd);
//往前追加
list.prepend(xxx);
//指定第一个位置插入 等价于 prepend
list.insert(0, xxx);
//输出 QList(xxx, aaa, bbb, ccc, ddd)
qDebug() list;
2.扩展类型的使用 Qt内置了一些QList、QMap、QHash相关的类型可以直接用不用自己写个长长的类型比如QStringList,不用你写个QListQString
//qwindowdefs.h
typedef QListQWidget * QWidgetList;
typedef QListQWindow * QWindowList;
typedef QHashWId, QWidget * QWidgetMapper;
typedef QSetQWidget * QWidgetSet;
//qmetatype.h
typedef QListQVariant QVariantList;
typedef QMapQString, QVariant QVariantMap;
typedef QHashQString, QVariant QVariantHash;
typedef QListQByteArray QByteArrayList;3.关于QSS的坑 关于QSS要注意的坑qss源自css相当于css的一个子集主要支持的是css2标准很多网上的css3的标准的写法在qss这里是不生效的所以有时候搜到css3的一些写法不能盲目的直接copy过来用很可能不支持的。qss也不是完全支持所有的css2比如text-align官方文档就有说明只支持 QPushButton andQProgressBar务必看清楚有时候偷懒直接来一句 *{xxx}你会发现大部分是应用了也有小部分或者极个别没有应用你可能需要在对应的窗体中 this-setStyleSheet() 来设置qss的执行是有优先级的如果没有指定父对象则对所有的应用比如在窗体widget中 {color:#ff0000;} 这样会对widget以及widget的所有子对象应用该样式这种问题各大群每周都有人问你会发现各种奇奇怪怪的异样不正常怎么办呢你需要指定类名或者对象名比如#widget{color:#ff0000;} 这样就只会对widget对象应用该样式另一种写法QWidget#widget{color:#ff0000;}只想对窗体本身而不是子控件按钮标签等.QWidget{color:#ff0000;} 具体详细规则参见官方说明。
4.Qt的延时方法 关于Qt延时的几种方法举几个例子
void QtHelperCore::sleep(int msec)
{
if (msec 0) {
return;
}
#if 1
//非阻塞方式延时,现在很多人推荐的方法
QEventLoop loop;
QTimer::singleShot(msec, loop, SLOT(quit()));
loop.exec();
#else
#if (QT_VERSION QT_VERSION_CHECK(5,0,0))
//阻塞方式延时,如果在主线程会卡住主界面
QThread::msleep(msec);
#else
//非阻塞方式延时,不会卡住主界面,据说可能有问题目前没发现
QTime endTime QTime::currentTime().addMSecs(msec);
while (QTime::currentTime() endTime) {
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
#endif
#endif
}5.Qt编译的三种版本 关于QtCreator中三种不同编译版本 debug、release、profile 的区别简单说下 debug调试模式编译后的可执行文件很大带了很多调试符号信息等方便开发阶段调试的时候进入具体的堆栈查看值。会打开所有的断言运行阶段性能差速度慢可能会有卡顿感觉 release发布模式编译后的可执行文件很小不带任何调试符号信息一般用于打包发布程序。由于经过了各种优化会关闭所有断言运行阶段性能最好如果有卡顿那肯定是你的程序有问题了 profile概述模式编译后的可执行文件比debug小很多比release大一点带有部分调试符号信息在debug和release之间取一个平衡兼顾性能和调试性能更优但是又方便调试 debug链接的库是带d结尾的release和profile链接的库是不带d结尾的很多人以为profile链接的是带d结尾的其实是错误的新的Qt在线安装程序在安装的时候可以勾选是否安装debug调试库对应lib目录下一堆带d结尾的文件以前的版本是默认都安装现在可选安装以便减少体积无论是否安装了debug调试库你都可以选择debug模式生成对应debug的文件无论是哪种模式都可以在程序中开启日志钩子输出日志信息方便收集运行阶段的各种信息反馈给开发人员查看问题最初的开发工具一般是具有debug和release两种模式随着用户需求的增加和场景的需要部分开发工具衍生出了profile模式更有甚者比如flutter还有第四种test模式。 6.环境搭建多练练 Qt的构建套件一般是在安装Qt开发环境的时候自动设置的当然也可以手动设置手动设置的时候千万要注意编译器和Qt库必须一致否则该构建套件是有问题的千万不能乱设置尤其是对构建套件命名的时候最好标明qt版本和编译器版本最好也要一致不要说名称叫msvc而编译器选择的确是mingw这样尽管能正常使用该构建套件但是会造成一种误解还以为该套件是msvc的其实里面是mingw的。这个在windows上其实比较好甄别也不太容易出问题但Linux交叉编译的环境下一定要注意区分那些交叉编译链有时候编译没问题一上板子发现运行有问题艾玛编译器选错了~~ 7.指向Qt源码的报错 当你编译Qt程序发现编译通不过提示报错而且报错提示指向的是Qt源码自身的一些头文件的时候不要去尝试着修改Qt头文件来编译通过那样没用而且会带来意想不到的错误你使用的Qt的库是已经根据原始的头文件编译好的。如果报错提示在编译生成的临时的moc等文件你也不要尝试去修改他那个是临时文件这次你改好了也许编译通过了你重新编一下又覆盖了还是旧的错误。总之你要从你的代码找问题。