c++ - QT 5.15:创建 QPushButton 会使程序崩溃
问题描述
使用最新的 QT 5.15.0、c++20、cmake 3.17、MSVC 16.7.2
我有一个简单的 QWidget:(所有必要的包含在预编译头文件中定义)
小部件.h
#pragma once
#ifndef _WIDGET_H_209323
#define _WIDGET_H_209323
class TestWidget: public QWidget {
Q_OBJECT
public:
explicit TestWidget(QWidget* parent = nullptr);
private:
QVBoxLayout* side_panel_;
private:
auto init_elements() -> void;
};
#endif
小部件.cpp:
#include "widget.h"
TestWidget::TestWidget(QWidget* parent) : QWidget(parent) {
init_elements();
}
auto TestWidget::init_elements() -> void {
auto init_main_panel = [this]() {
side_panel_ = new QVBoxLayout();
QPushButton* main_view = new QPushButton("test");
side_panel_->addWidget(main_view);
};
init_main_panel();
this->setLayout(side_panel_);
}
该程序编译良好,但在启动时崩溃,Process finished with exit code -1073741511 (0xC0000139)
没有别的。
例如,更改QPushButton
为任何其他小部件
QLabel* label = new QLabel(this);
label->setText("test");
side_panel_->addWidget(label);
按预期工作,没有任何问题。
实际上,只需将widget.h
with添加QPushButton
到 CMakeLists.txtadd_target
中,而不将其包含在任何其他项目文件中,程序就会在启动时崩溃。
更新:尝试将项目加载到 Visual Studio 并得到更有意义的错误:
The procedure entry point
?hitButton@QPushButton@@MEBA_NAEBVQPoint@@@Z
could not be located int the dynamic link library
更新 2:将 QT 版本更改为 5.14.2 可修复此问题。这两个版本都是从官方 QT 安装程序安装为 MSVC 预编译的 64 位(5.14 的 MSVC2017 和 5.15 的 MSVC2019)。
解决方案
推荐阅读
- php - 尝试从 json 获取值时出错
- python - 从 `torch` 或 `numpy` 向量创建 pytorch 张量
- gcc - 当线程清理程序报告数据竞争时如何添加断点?
- ios - Xcode 11 Simulator - 如何自定义模拟设备分辨率
- ios - 尝试在 UIImagePickerController didFinishPickingMediaWithInfo 回调中移动文件失败并出现“您没有权限”错误
- python - 使用 os.system 或 subprocess.Popopen 启动的软件在 python 关闭时关闭
- server - Netty 中的 ReplayingDecoder 在每次迭代中读取 10240 字节
- python - 如何适合第一个标签matplolib python的第二个标签底部
- cmd - 无法从 cmd 在 Documents 中找到文件
- django - 大型数据集的 Graphene-python 性能问题