以下是笔者的碎碎念,正文向下滑…..
emm…….背景是这样子的,前两天老师查看需求实现情况的时候,表示我没有界面操作。。。。啊这。。。我遂即恶补了Qt的知识,熬完了传智的视频和练习,老师表示不要原生要Office风格的系统。。。(似乎老师们对Office的风格都有一种执念…..)好吧,继续研究ing,找到了开源项目SARibbon,刚上手超级生涩(笔者以前是做前端的,最近开始C++的桌面端),过程中遇到了很多的Bug….作为一名多年码农,有Bug和吃饭一样见怪不怪了,But……就有那么一两个Bug,能让你一杯茶,一首歌,一行代码改一天….果断记录下来……(头秃的过程中我开始了碎碎念….)
正文!!!
注意事项:
- 编译
SARibbon
的pro
文件是\src\SARibbonBar\SARibbonBar.pro
,不是根目录下面的SARibbon.pro
,虽然编译出来的东西似乎都一样,但是官方文档中这么写,就标注一下,严谨能避免很多莫名其妙的Bug - 把编译完的整个项目放到项目里,(应该最后只需要留下
include
、lib
、和dll
,目前只测试到这里) - 项目的
pro
文件中需要添加的,位置如下,一个在头,一个在尾。1
2
3
4
5
6
7
8
9
10
11
12
13
14include($$PWD/..SARibbon-master/common.pri)
DESTDIR = $${SARIBBON_BIN_DIR}
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
include($$PWD/../SARibbon-master/SARibbonBar.pri) - 使用的时候继承
SARibbonMainWindow(parent)
类即可
问题1
在Qt中正常运行的项目,在Vs中打开,运行的时候会报错,表示找不到SARibbonBard.lib
,查看一下链接器的输入,地址是SARibbon
项目编译输出目录下,但是里面并没有这个文件,只有一个.dll
和一个.o
的文件。
解决
.o
文件时WinGW环境下编译的静态库文件也就是VS中生成的.lib
文件,所以在VS中运行,只需要把SARibbon
项目在VS中编译,把静态库连接到项目中就可以了。
问题2
这个时候,在Qt Creator中在运行,又会报error: undefined reference to __imp__ZN16SARibbonCategory9addPannelERK7QStr
之类的错误
解决
这也是没有引用静态库造成的,但是我们明明换成了lib
的静态库,怎么又不行了。
不难想到,在WinGW环境下需要引用它支持的.o
静态库,在MSVC中需要引用.ib
的静态库。
观察一下WinGW
编译生成的build......
文件中,只有.cpp
文件和.o
的文件
结尾碎碎念….emm…..写完之后有感觉,只是一个很简单的
bug
,怎么就改了一下午。。。
原文链接: http://enofeng.github.io/2021/10/05/Qt + MSVC使用SARibbon控件,踩坑记录/
版权声明: 转载请注明出处.