如何解决QT 5.15:创建QPushButton会使程序崩溃
使用最新的QT 5.15.0,c ++ 20,cmake 3.17,MSVC 16.7.2
我有一个简单的QWidget :(所有必需的内容都包含在预编译的标头中)
widget.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
widget.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
和QPushButton
添加到CMakeLists.txt add_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可解决此问题。这两个版本都以MSVC的形式通过官方QT安装程序预编译了64位(MSVC2017为5.14,MSVC2019为5.15)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。