调用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()时直接访问空指针触发段错误。
解决方法
- 将
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(); // 建议添加,维持应用事件循环运行 }
- 确认CMake中已正确链接
Qt6::Widgets(你当前的配置已满足此要求,无需修改)。
内容的提问来源于stack exchange,提问作者Nirbhik Navin
相关产品推荐
相关产品推荐

