C++ QT文件菜单未集成到标题栏中

C++ QT文件菜单未集成到标题栏中,c++,qt,qt-creator,ubuntu-15.04,C++,Qt,Qt Creator,Ubuntu 15.04,我正在QtCreator 3.5.1中编写一个基本的gui应用程序,我正在使用Qt5.5。我已经通过他们的网站下载了QT/QT creator。我目前正在运行Ubuntu 15.04 64位 我遇到了一个关于将菜单栏集成到标题栏的问题。问题是没有发生集成(菜单栏没有出现在标题栏中)。菜单栏显示在过去的位置,在平铺栏下方。下面是正在发生的事情的图像: 我如何着手解决这个问题 更新: 我通过apt get和qt creator安装了qt 5.4.1。当我针对这个进行编译时,我的标题栏集成工作正常!

我正在QtCreator 3.5.1中编写一个基本的gui应用程序,我正在使用Qt5.5。我已经通过他们的网站下载了QT/QT creator。我目前正在运行Ubuntu 15.04 64位

我遇到了一个关于将菜单栏集成到标题栏的问题。问题是没有发生集成(菜单栏没有出现在标题栏中)。菜单栏显示在过去的位置,在平铺栏下方。下面是正在发生的事情的图像:

我如何着手解决这个问题

更新:


我通过apt get和qt creator安装了qt 5.4.1。当我针对这个进行编译时,我的标题栏集成工作正常!所以问题是,有什么不同?与我一起开发的人正在使用Qt5.5.1,我希望使用与他们相同的版本。这次我能做些不同的事情吗?

我发现的独特方式是。他声称这种方法在QtCreator上有效,但我已经在Ubuntu 32/64位Qt5应用程序(由我开发)上进行了测试,它似乎也能正常工作

这些步骤是:

  • 开放式终端
  • 输入
    sudo apt get install libgtk2.0-dev libdbusmenu-qt5-dev
  • 用CD命令设置当前目录(appmenu项目将在此处运行)
  • 输入命令
    apt get source appmenu-qt5
  • 现在,博客仍然使用命令行,但接下来的步骤可以通过在Qt Creator中打开项目来完成(项目位于当前目录)

  • 使用一些文本编辑器(当然可以是Qt Creator),编辑
    appmenu/src/src.pro的以下行:

    CONFIG+=X11链接\u pkgconfig调试

    PKGCONFIG+=dbusmenu-qt5 gtk+-2.0

    DESTDIR=/

  • 到(如果需要动态库):

    或者(如果需要静态链接库):

  • 使用Qt Creator打开项目(如果您还没有这样做),选择构建模式(发布模式的大小似乎更小)并构建

  • 如果成功构建(作为一个动态库),您将在Qt5安装文件夹
    /plugins/platformthemes
    中有一个名为
    libappmenu-Qt5.so
    的插件。要获得菜单集成,只需将库放在目标应用程序(包括Qt Creator)的
    platformthemes
    子文件夹中

  • 或者,如果成功构建(作为静态链接库),您将在Qt5安装文件夹
    /plugins/platformthemes
    中有一个文件
    libappmenu-Qt5.a
    。这是静态库。要将其与应用程序集成,请将以下内容添加到项目文件:

    QT       +=  core-private gui-private platformsupport-private dbus widgets
    
    LIBS     += $$[QT_INSTALL_DATA]/plugins/platformthemes/libappmenu-qt5.a
    
    CONFIG    += X11 link_pkgconfig
    PKGCONFIG += dbusmenu-qt5 gtk+-2.0
    
    和您的
    main.cpp

    #include <QtPlugin>
    
    Q_IMPORT_PLUGIN(AppMenuPlatformThemePlugin)
    
    int main(int argc, char *argv[])
    ...
    
    #包括
    Q_导入_插件(AppMenuPlatformThemePlugin)
    int main(int argc,char*argv[])
    ...
    
    结果应该是:

    编辑(生成为动态库时有效):请注意,您不需要重新编译Qt应用程序或Qt Creator

    对于Qt Creator,您需要将
    libappmenu-qt5.so
    放在您的Qt安装文件夹中:
    /Tools/QtCreator/lib/Qt/plugins/platformthemes

    如果您想重新分发Qt应用程序,只需在可执行文件的文件夹中与
    libappmenu-qt5共享文件夹
    platformthemes
    。像其他任何Qt插件一样

    编辑2:如果不需要额外的依赖项,也可以构建静态链接的插件。

    您可以尝试将QMenuBar对象的“nativeMenuBar”属性设置为false
    因为此属性的默认值为true

    您的意思是希望菜单栏显示在标题栏上?我没有在linux系统上使用Qt,但我认为您应该实现一个自定义框架窗口并创建一个自定义标题栏。这就是我在Windows上所做的。检查关于Qt::FramelessWindowHintYes的文档,这就是我想要的。嗯,我不确定我是否完全理解。你能详细说明一下吗?但同时,这种整合在统一中似乎是自动的。旧的应用程序似乎正如我所期望的那样工作,所以我想知道是否有一个更简单的解决方案。而且它不能向该系统标题栏添加其他Qt控件。因此,您需要使用无框窗口并添加自定义标题栏。您可以检查一下,您是否知道标题栏/菜单栏集成在现代版本的Ubuntu/Unity中是如何工作的?我理解你的意思(我想),但我一直觉得我们不在同一页上。我不确定我是否理解你对我的目标应用程序的
    platformthemes
    子文件夹的意思。对我来说,如果QT-Creator应用程序缺少菜单集成,这似乎是有道理的,但我不确定如何使我在QT-Creator中编写的应用程序能够工作。你的意思是我应该在我正在编写的应用程序的源代码中创建这样一个文件夹,并将.so文件复制到其中?我的应用程序还会编译成一个可执行文件吗?@byteof thet:很抱歉,不清楚,请查看我的编辑。因此,使用此方法,我无法生成一个可分发的可执行文件?@byteof thet:根据我的第一个回答,您需要额外的依赖关系。但是我在我的答案中添加了一个静态链接方法,没有额外的依赖关系。
    QT       +=  core-private gui-private platformsupport-private dbus widgets
    
    LIBS     += $$[QT_INSTALL_DATA]/plugins/platformthemes/libappmenu-qt5.a
    
    CONFIG    += X11 link_pkgconfig
    PKGCONFIG += dbusmenu-qt5 gtk+-2.0
    
    #include <QtPlugin>
    
    Q_IMPORT_PLUGIN(AppMenuPlatformThemePlugin)
    
    int main(int argc, char *argv[])
    ...