百摩网
当前位置: 首页 生活百科

qt编程技巧(Qt开发经验小技巧141-145)

时间:2023-08-01 作者: 小编 阅读量: 7 栏目名: 生活百科

以下内容大家不妨参考一二希望能帮到您!qt编程技巧141.QImage支持xpm图标,查看Qt内置的QStyle风格的代码中可以发现大量的xpm图标定义,通过代码的形式来产生图标,哇咔咔好牛逼。-第一步:代码文件选择用utf8编码带bom。-第三步:main函数中加入设置编码的代码,以便兼容Qt4,如果没有Qt4的场景可以不用,从Qt5开始默认就是utf8编码。

qt编程技巧?141. QImage支持xpm图标,查看Qt内置的QStyle风格的代码中可以发现大量的xpm图标定义,通过代码的形式来产生图标,哇咔咔好牛逼,接下来我们就来聊聊关于qt编程技巧?以下内容大家不妨参考一二希望能帮到您!

qt编程技巧

141. QImage支持xpm图标,查看Qt内置的QStyle风格的代码中可以发现大量的xpm图标定义,通过代码的形式来产生图标,哇咔咔好牛逼。

```cpp

static const char * const imgData[] = {

"15 11 6 1",

" c None",

"c #979797",

"@ c #C9C9C9",

"$ c #C1C1C1",

"b c None",

"d c None",

" $$ ",

"$ bbbbbbbb $ ",

" b $$$ ",

" b $@$ ",

" b$",

" b d ",

" b d $",

" b $$ d $ ",

" b $@ d $ ",

"$ dddddddd $ ",

" $$ "};

//这样就能直接显示一个箭头的图形

QImage img(imgData);

QLabel lab;

lab.setPixmap(QPixmap::fromImage(img));

lab.show();

```

142. 在停靠窗体QDockWidget和QOpenGLWidget同时使用的时候,从嵌入状态切换到浮动状态或者浮动状态切换到嵌入状态,QOpenGLWidget的上下文会被打乱导致白屏失效,需要在main函数中开头位置设置下共享OpenGL上下文。

```cpp

int main(int argc, char *argv[])

{

//需要设置共享上下文不然停靠窗体从正常到浮动后QOpenGLWidget窗体会失效

#if (QT_VERSION > Qt_VERSION_CHECK(5,4,0))

QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);

#endif

QApplication a(argc, argv);

...

}

```

143. 关于Qt中文乱码的问题,个人也稍微总结了一点,应该可以解决99%以上的Qt版本的乱码问题。

- 第一步:代码文件选择用utf8编码带bom。

- 第二步:在有中文汉字的代码文件顶部加一行(一般是cpp文件) #pragma execution_character_set("utf-8") 可以考虑放在head.h中,然后需要的地方就引入head头文件就行,而不是这行代码写的到处都是;这行代码是为了告诉msvc编译器当前代码文件用utf8去编译。

- 第三步:main函数中加入设置编码的代码,以便兼容Qt4,如果没有Qt4的场景可以不用,从Qt5开始默认就是utf8编码。

```cpp

void QUIHelper::setCode()

{

#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

}

```

144. 关于Qt众多版本(至少几百个)都不兼容的问题,在经过和Qt中国的林斌大神和其他大神(Qt非官方技术交流群)头脑风暴以后,最终得出以下的结论。

- Qt在二进制兼容这块,已经做了最大的努力,通过将各种代码细节隐藏,Q指针 D指针技巧,尽量保持了接口的统一;

- 是否兼容最主要考虑编译器的因素,毕竟任何Qt版本都是需要通过编译器编译成对应的二进制文件,由他说了算。如果两个Qt版本采用的编译器版本一样,极大概率可执行文件是兼容的,比如 Qt5.10 msvc2015 32 位 和 Qt5.11 msvc2015 32位 编译出来的可执行文件,都用Qt5.11的库是可行的;

- mingw编译器的Qt版本也是如此,就是因为Qt官方安装包集成的mingw编译器一直在更新(极少附近版本没有更新mingw编译器版本除外),比如5.7用的mingw53,5.12用的mingw73,5.15用的mingw81,因为带的Qt库也是这个编译器编译出来的,所以导致看起来全部不兼容;

- 如果想要完全兼容,还有一个注意要素,那就是对应代码使用的类的头文件接口是否变了,按道理原有的接口极少会变,一般都是新增加,或者大版本才会改变,比如Qt4-Qt5-Qt6这种肯定没法兼容的,接口和模块都变了;

- 大胆的猜测:如果Qt5.6到Qt5.15你全部用一种编译器比如mingw73或者msvc2015重新编译生成对应的Qt运行库,然后在此基础上开发程序,最后生成的可执行文件用Qt5.15的库是都可以的,这样就轻松跨越了多个版本兼容;

- 大胆的建议:在附近的几个版本统一编译器,比如5.6-5.12之间就统一用mingw53或者msvc2015,5.12-5.15统一用msvc2017,要尝鲜其他编译器的可以自行源码编译其他版本,这样最起码附近的一大段版本(大概2-3年的版本周期)默认就兼容了。

- 本人测试的是widget部分,qml未做测试,不清楚是否机制一样;

145. 通过酷码大哥(Qt开发者交流群)的指点,到今天才知道,Qt设置样式表支持直接传入样式表文件路径,亲测4.7到5.15任意版本,通过查看对应函数的源码可以看到内部会检查是否是 'file:///' 开头,是的话则自动读取样式表文件进行设置,无需手动读取。

```cpp

//以前都是下面的方法

QFile file(":/qss/psblack.css");

if (file.open(QFile::ReadOnly)) {

QString qss = QLatin1String(file.readAll());

qApp->setStyleSheet(qss);

file.close();

}

//其实一行代码就行

qApp->setStyleSheet("file:///:/qss/psblack.css");

```

Qt开发经验开源主页(持续更新):

1. [https://gitee.com/feiyangqingyun/qtkaifajingyan](https://gitee.com/feiyangqingyun/qtkaifajingyan)

2. [https://github.com/feiyangqingyun/qtkaifajingyan](https://github.com/feiyangqingyun/qtkaifajingyan)

    推荐阅读
  • 重庆市可以网上补领身份证(重庆中心城区婚姻登记预约爆满重庆网上补领居民身份证服务扩展到9区县)

    来源:“520”重庆中心城区婚姻登记预约爆满因为与“我爱你”互为谐音,5月20日这天成为众多准新人眼中理想的结婚日期。一年一度的网络情人节“520”将至,上游新闻记者了解到,目前重庆中心城区各婚姻登记处当天的结婚登记均被约满,重庆即将迎来结婚登记小高峰。5月17日,重庆市教委印发了《关于公布2022年普通高校“专升本”招生考试录取最低控制分数线的通知》。全国党媒信息公共平台提供信息发布传播服务。

  • 造梦西游4手机版唐僧饰品怎么加(造梦西游4手机版唐僧究天夺魂套装详细解读)

    下面97973手游网小编就为大家来好好介绍一下这套装备,希望这篇攻略能够帮助大家,快来看看吧,接下来我们就来聊聊关于造梦西游4手机版唐僧饰品怎么加?造梦西游4手机版唐僧饰品怎么加造梦西游4手机版中,唐僧的第一套装备就是究天夺魂套装了。想要了解更多造梦西游4手机版攻略,敬请关注97973手游网!97973手游网声明:97973手游网登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。

  • 脑梗死后遗症多久才能恢复(脑梗死后遗症最关键的恢复期是多长时间)

    半拉身子不能动的小张,躺在床上,用非常艰难的发音说出几个字:还--能--好--吗?这是发生急性脑梗死是小张,住院第七天;入院的时候,已经完全不能说话,左侧胳膊腿全部不能动。小张今年36岁,一米七,体重180,有高血压,最高170/110,但从不在乎,谁说都不听,没事,不就高血压吗?就像小张本来只要好好降血压,没事的事,非要和高血压闹别扭。治疗是最好的预防,不要把所有的期望留给康复,不要小瞧高血压。

  • 下午右眼跳是什么预兆(“左眼跳吉,右眼跳灾”)

    子时:左眼跳代表命遇贵人,扶持相帮,可静候佳音;右眼跳代表他人请客,吃喝不愁,可开怀畅食。

  • 练瑜伽的美女 教练(瑜伽教练太美了)

    ▲《持续可能的恋爱》第二话演员上野树里主演的TBS电视剧《持续可能的恋爱》于4月26日更新Instagram。这部电视剧讲述的是主人公瑜伽教练泽田杏花与丧妻的父亲林太郎一起参加相亲的故事。以此为契机,女儿开始思考“应该和谁一起共度余生”,父亲也开始直面自己的“第二人生”。

  • 金枪鱼内脏怎么吃(金枪鱼内脏怎么吃比较好)

    下面更多详细答案一起来看看吧!金枪鱼内脏怎么吃金枪鱼的内脏一般是和鱼肉一起食用的,不会作为单独的食材进行烹制,建议大家少吃鱼内脏,尤其是鱼肝。对于金枪鱼来说,保鲜非常重要,价格由高到低的顺序是鲜活、冰鲜、冻品、干品和罐头。金枪鱼在保存时最常用的办法是冰鲜法,这是一种常见而又简单易行的保鲜法,这种保鲜方式可以使使金枪鱼保鲜期长达4天左右。

  • 小米手机都是有哪些隐藏功能(小米手机的几个隐藏功能)

    小米手机作为性价比很高的手机之一,很多小伙伴都很喜欢,不止止是因为手机配置主流,系统界面漂亮,还因为实用,功能多。

  • 推荐两款非常好吃的美食(9月遇到此美食我从不还价)

    9月遇到此美食,我从不还价,一次买20斤放冰箱,冬天吃特香!糯玉米不管是直接煮着吃还是做粥喝都十分鲜美,是一道健身减肥的健康美食!这样保存的玉米很完整,营养和水分都不会流失,想吃的时候拿出来几根煮上,吃着和新鲜的玉米一样香甜多汁,保存一年都不会坏。再取一个擦菜板,将糯玉米擦成玉米蓉,然后再按照平时一次吃的量装到保鲜袋里,密封起来放到冰箱里冷冻保存即可。

  • 奶粉成分怎么选择(挑选奶粉还看成分)

    但那些香味只能改变奶粉的口感,并不能增加营养,虽然食用少量的香精对人体没有危害,但是如果长期食用带有香精的奶粉,肯定对宝宝的生长发育造成影响。而且奶粉原来只是淡香,并没有其他特别的气味。所以宝妈在选择奶粉时,一定要选择奶源放心,生产工艺可靠的配方奶粉。宝妈在给宝宝冲奶粉时,不要使用矿泉水,矿泉水里的矿物质不适合宝宝食用,使用普通的白开水才是最佳的选择。

  • 大卫不可以绘本故事适合表演吗(不可以是控制孩子的书吗)

    不可以是控制孩子的书吗文/张宏涛有不少人觉得《大卫不可以》这本书不好,三观不正,一直在禁止孩子做这做那,他们甚至开玩笑说“大卫,你可以!”我来换个角度解读下这本书首先,书中前面部分,都是“不可以”的部分,这些也基本都是普通。