Программа зависает на определенной строке в функции без сигнала от операционной системы - PullRequest
0 голосов
/ 31 мая 2018

Я делаю программное обеспечение для управления библиотекой в ​​Qt.У меня есть класс LogWindow, в котором отображается журнал (в основном "x" издал книгу 'y' на дату 'abc' ').Я добавил 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 ()', и все работает отлично.Док работает, LogWindow показывается, программа работает как положено

1 Ответ

0 голосов
/ 31 мая 2018

Проблема была в третьей последней строке createBookIssued (). Я добавлял bookIssued (групповой блок) в макет, а затем устанавливал макет на тот же bookIssued.Заменена третья последняя строка на:

bookIssuedLayout->addWidget(book);

Программа теперь работает как положено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...