首页 > 解决方案 > 程序在没有来自操作系统的信号的情况下挂在函数中的特定行

问题描述

我正在用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,程序按预期工作

标签: c++qtqt5qdockwidget

解决方案


问题出在 createBookIssued() 的倒数第三行中,我将 bookIssued(组框)添加到布局中,然后将布局设置为相同的 bookIssued。将倒数第三行替换为:

bookIssuedLayout->addWidget(book);

该程序现在按预期工作


推荐阅读