c++ - 程序在没有来自操作系统的信号的情况下挂在函数中的特定行
问题描述
我正在用qt制作图书馆管理软件。我有一个 LogWindow 类,其中显示日志(基本上是“'x'在日期'abc'上发行的书'y'”)。我添加了一个 QDockWidget 来过滤结果,比如说,用户只想查看今天的活动,或者说用户想查看到目前为止谁都发行了书“x”。
问题是程序突然停止执行。
在我的 LogWindow 构造函数中,我调用 createDock 函数,它是一个私有函数:
void LogWindow :: createDock()
{
//initialize main layout of dock
layout = new QVBoxLayout;
//initialize dock
dock = new QDockWidget("Filters", this);
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
dock->setWindowTitle("Filters");
dock->setFeatures(QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable);
//make group boxes
filters = new QWidget(this);
createHistory();
createIssuedBy();
createBookIssued();
filters->setLayout(layout);
dock->setWidget(filters);
this->addDockWidget(Qt::RightDockWidgetArea, dock);
dock->show();
}
不知道为什么,但程序一直运行到倒数第二行,但最后一行没有执行。我通过在函数的每一行设置断点发现了这一点。
void LogWindow::createBookIssued()
{
//book issued group box
bookIssued = new QGroupBox("Book Issued");
book = new QLineEdit;
QHBoxLayout *bookIssuedLayout = new QHBoxLayout;
bookIssuedLayout->addWidget(bookIssued);
bookIssued->setLayout(bookIssuedLayout);
layout->addWidget(bookIssued);
}
我没有收到来自操作系统的任何信号,但程序停止响应任何事件。也没有显示 LogWindow。
所以,我评论了对“createBookIssued()”函数的调用,一切正常。Dock 工作,显示 LogWindow,程序按预期工作
解决方案
问题出在 createBookIssued() 的倒数第三行中,我将 bookIssued(组框)添加到布局中,然后将布局设置为相同的 bookIssued。将倒数第三行替换为:
bookIssuedLayout->addWidget(book);
该程序现在按预期工作
推荐阅读
- c++ - 如何在保持连续性的同时拆分 OpenCV 矩阵?
- windows - 无法在 GoLand 中使用已安装的软件包
- c - C exec 多命令
- javascript - React-MDL 网格单元显示在 http://localhost:3000/ 和托管网站的不同位置
- powershell - Powershell 绑定参数路径
- c# - 使用 selenium chromedriver 上传文件
- html - 如何一次将一个选项从一个选择克隆到另一个?
- python - RSA Python 问题
- r - 更改随机效应分组变量的标签会更改 lme4 中的结果
- http - 在 JMeter 中发送 HTTP POST 时,正文中的二进制数据已损坏