鼠标悬停在按钮上时QT应用程序崩溃

时间:2019-02-13 19:45:59

标签: c++ qt

我将尽我所能将故事简短化。 我按照本指南静态编译了QT 5.11.2,以便能够在Windows下编译单个可执行文件: https://retifrav.github.io/blog/2018/02/17/build-qt-statically/

经过多次试验,编译,这样我能够以“释放”模式获得大约15MB的.exe

我在"QTPLUGIN.imageformats = -"项目中使用选项.pro使用不同的MinGW版本来编译它,以避免出现-ltiff错误。 这很奇怪,因为我的应用程序没有图像处理操作...

我的应用程序是一个简单的基本按钮(没有事件关联)。

我现在面临的问题是,当鼠标移到按钮上并且它应该从灰色变成浅蓝色时,Windows方向盘会旋转一秒钟,然后应用程序因Segmentation fault而崩溃。

使用动态编译效果很好,并且不会崩溃。

经过多次尝试,我发现至少另一个QT对象以RadioBox相同的方式崩溃。鼠标悬停事件可以正确处理CheckBoxTool Button

我试图更改从工作对象复制的崩溃对象属性,但仍然崩溃!

我很绝望!经过静态编译的噩梦之后,我发现了这个问题,到目前为止,没有谷歌搜索对我有帮助。

经过测试的编译器是:

MinGW 4.9.2 g++
MinGW 5.3 g++
MinGW 7.3 g++

我还试图删除调试器,以防万一。

有帮助吗?

由于已知的问题,我正从Rad Studio移至QT,而不是解决方案。

1 个答案:

答案 0 :(得分:0)

我将其发布为答案,因为它太长了,无法发表评论...

我从头开始安装了qt。我从qt git hub回购开始。完成后,我将其作为套件添加到我的qtcreator中,并重新构建了一些我曾经使用按钮进行过的GUI项目。然后,我拿了exe的文件(它们大约500mb,因为我使用了调试配置)并在从未见过Qt(旅行笔记本电脑)的PC上运行它们,并且我测试的两个程序在按下按钮时都运行良好,并且没有崩溃。

因此,这是我使用的说明列表(适用于Windows 10),您也许可以从头开始尝试一下,看看是否有帮助:

1。准备

无特殊顺序:

  • 安装Strawberry Perl(在编译过程中需要)。请注意,普通的perl似乎不能很好地工作。
  • 获取qt来源:
    • git clone https://github.com/qt/qt5.git qt5
    • git checkout 5.12.1(特定的内部版本,而不是最新的5.12)
    • git submodule update --init --recursive
    • git submodule foreach --recursive "git clean -dfx" && git clean -dfx(确保仓库是干净的)
  • https://sourceforge.net/projects/mingw-w64/下载并安装mingw64(32位)。我使用了以下选项:
    • 版本7.3.0
    • Arch i686
    • 线程posix
    • 矮人异常
    • Build-rev 0
  • Windows 10 NTFS长路径名
  • 安装Python(在make install期间需要):

注意::在mingw文件夹中应该有一个mingw-xx.bat文件来为gcc打开cmd提示符环境。对所有cmd提示运行此命令以执行以下操作。

注意::请确保您编辑路径,以便草莓perl ... / bin位于任何其他perl之前 因此,DOS环境设置应如下所示:

    set PATH=D:\install\StrawberryPerl\perl\bin;%PATH%
    set PATH=D:\install\mingw-w64\i686-7.3.0-posix-dwarf\mingw32\bin;%PATH%
    set PATH=D:\install\Qt\qt5\qtbase\bin;%PATH%
    set PATH=D:\install\Qt\qt5\gnuwin32\bin;%PATH%

我的qt5 git存储库位于D:\install\Qt\qt5处。

2。配置

2.1。静态配置

  • 在与../qt5/仓库(例如,../qt5-static-build/)相同的级别上创建文件夹,并将其CD放入其中,然后运行:
- ..\qt5\configure -debug -opensource -static -static-runtime -skip webengine -nomake examples -nomake tests -nomake tools -accessibility -no-sql-sqlite -no-opengl -platform win32-g++ -qt-zlib -qt-libpng -qt-libjpeg -confirm-license -prefix "C:\install\Qt\5.12.1-static"

2.2。共享库配置

  • 在与../qt5/仓库(例如,../qt5-build/)相同的级别上创建文件夹,并将其CD放入其中,然后运行:
..\qt5\configure -debug -opensource -skip webengine -nomake examples -nomake tests -nomake tools -accessibility -no-sql-sqlite -no-opengl -platform win32-g++ -qt-zlib -qt-libpng -qt-libjpeg -confirm-license -prefix "C:\install\Qt\5.12.1-sharedlib"

3。编译安装

您配置qt的两种方法(静态或非静态)都相同,基本上可以运行:

mingw32-make -j8
mingw32-make install -j8

注意:您可以使用所需的任何并行号码(-j<num-jobs>)。当然,每个阶段都需要一段时间,具体取决于您的CPU。

完成后,在配置行中设置的安装路径(例如C:\install\Qt\5.12.1-static)将包含您的qt安装。然后,您可以将其作为新的qt版本添加到qtcreator中。(如果您使用的是它的构建方式)。

附录-释放静态配置

如果要发布版本等,则可能需要以下配置(但我尚未对此进行测试):

.. \ qt5 \ configure具有以下选项:

-release -optimize-size -opengl desktop -no-pch -platform win32-g++ -opensource -static -static-runtime -skip webengine -nomake examples -nomake tests -nomake tools -accessibility -no-sql-sqlite -no-opengl -platform win32-g++ -qt-zlib -qt-libpng -qt-libjpeg -confirm-license -prefix "C:\install\Qt\5.12.1-static"

我添加的位置:

  • -release-代替调试
  • -optimize-size-缩小尺寸
  • -opengl desktop-如果需要则使用opengl
  • -no-pch-没有预编译的标头,不确定您是否需要此标头,但是...
  • -platform win32-g++-同样,如果您遇到构建问题,但可能不需要它,这可能会有所帮助。