Qt + MSVC使用SARibbon控件,踩坑记录

以下是笔者的碎碎念,正文向下滑…..

emm…….背景是这样子的,前两天老师查看需求实现情况的时候,表示我没有界面操作。。。。啊这。。。我遂即恶补了Qt的知识,熬完了传智的视频和练习,老师表示不要原生要Office风格的系统。。。(似乎老师们对Office的风格都有一种执念…..)好吧,继续研究ing,找到了开源项目SARibbon,刚上手超级生涩(笔者以前是做前端的,最近开始C++的桌面端),过程中遇到了很多的Bug….作为一名多年码农,有Bug和吃饭一样见怪不怪了,But……就有那么一两个Bug,能让你一杯茶,一首歌,一行代码改一天….果断记录下来……(头秃的过程中我开始了碎碎念….)

正文!!!

注意事项:

  1. 编译SARibbonpro文件是\src\SARibbonBar\SARibbonBar.pro,不是根目录下面的SARibbon.pro,虽然编译出来的东西似乎都一样,但是官方文档中这么写,就标注一下,严谨能避免很多莫名其妙的Bug
  2. 把编译完的整个项目放到项目里,(应该最后只需要留下includelib、和dll,目前只测试到这里)
  3. 项目的pro文件中需要添加的,位置如下,一个在头,一个在尾。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    include($$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)
  4. 使用的时候继承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,怎么就改了一下午。。。