You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用QApplication::style()->pixelMetric时触发Segmentation fault问题求助

段错误原因及解决方法

问题复现

执行以下代码时触发Segmentation fault:

#include <QApplication>

int main(int argc, char* argv[])
{
    QGuiApplication app(argc, argv);

    int width = QApplication::style()->pixelMetric(QStyle::PM_TextCursorWidth, nullptr);        
}

CMake配置已包含所需模块:

find_package(Qt6 6.2 REQUIRED COMPONENTS Core Gui Qml Quick Widgets)
target_link_libraries(be_2App PRIVATE
    Qt6::Core
    Qt6::Gui
    Qt6::Qml
    Qt6::Quick
    Qt6::Widgets
)

错误原因

  • QGuiApplication仅负责Qt GUI模块的基础初始化,不包含Widgets模块的样式系统初始化逻辑。
  • QApplication::style()是Widgets模块的接口,当应用实例为QGuiApplication时,Widgets的样式环境未被初始化,style()会返回空指针,调用pixelMetric()时直接访问空指针触发段错误。

解决方法

  1. 将QGuiApplication替换为QApplication,QApplication继承自QGuiApplication,会完整初始化Widgets相关的样式系统:
#include <QApplication>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv); // 替换为QApplication

    int width = QApplication::style()->pixelMetric(QStyle::PM_TextCursorWidth, nullptr);

    return app.exec(); // 建议添加,维持应用事件循环运行
}
  1. 确认CMake中已正确链接Qt6::Widgets(你当前的配置已满足此要求,无需修改)。

内容的提问来源于stack exchange,提问作者Nirbhik Navin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:22:08