У меня есть простой gui с текстовым полем, выпадающим меню и кнопкой go. Я могу указать имя и класс части, которую я ищу, и вызвать функцию, подключив кнопку «идти» к слоту, в котором выполняется функция, которую я уже сделал.Функция Qt C++ прерывает удаление неизвестной переменной
Однако, когда функция слота выполняется со всем, она вызывает функцию в xstring
, это удаление некоторых массивных xstring
. Он идет к этой функции:
void _Tidy(bool _Built = false,
size_type _Newsize = 0)
{ // initialize buffer, deallocating any storage
if (!_Built)
;
else if (this->_BUF_SIZE <= this->_Myres)
{ // copy any leftovers to small buffer and deallocate
pointer _Ptr = this->_Bx._Ptr;
this->_Getal().destroy(&this->_Bx._Ptr);
if (0 < _Newsize)
_Traits::copy(this->_Bx._Buf,
_STD addressof(*_Ptr), _Newsize);
this->_Getal().deallocate(_Ptr, this->_Myres + 1);
}
this->_Myres = this->_BUF_SIZE - 1;
_Eos(_Newsize);
}
И моя программа выполняет перерыв в this->_Getal().deallocate(_Ptr, this->_Myres + 1);
.
Вот код для графического интерфейса:
#include <QtGui>
#include <QApplication>
#include <QComboBox>
#include "gui.h"
#include <vector>
std::vector<std::string> PartClasses;
gui::gui(QWidget *parent) : QDialog(parent){
getPartClasses(PartClasses); //my own function, does not affect how the gui runs, just puts strings in PartClasses
label1 = new QLabel(tr("Insert Name (Optional):"));
label2 = new QLabel(tr("Class Name (Required):"));
lineEdit = new QLineEdit;
goButton = new QPushButton(tr("&Go"));
goButton->setDefault(true);
connect(goButton, SIGNAL(clicked()), this, SLOT(on_go_clicked()));
cb = new QComboBox();
for(int i = 0; i < PartClasses.size(); i++)
cb->addItem(QString::fromStdString(PartClasses[i]));
//*add widgets to layouts, removed for space*
setWindowTitle(tr("TEST"));
setFixedHeight(sizeHint().height());
}
void gui::on_go_clicked(){
std::string str(cb->currentText().toStdString());
updateDB(str, lineEdit->text().toUtf8().constData()); //my function, does not affect the gui.
QApplication::exit();
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
gui *stuff = new gui;
stuff->show();
return app.exec();
}
Что он делает? Когда я закончил с слотом, не следует ли возвращать gui, чтобы я мог указать новый объект? Как я могу получить его, чтобы не удалить этот объект или добиться успеха?
Похоже, что у вас есть сбой в вашей программе, который полностью не связан с сигналами и слотами. – Chris
Я просто попробовал добавить 'QApplication :: exit()' после вызова моей функции в 'on_go_clicked()', и он выполняет quit, но gui не закрывается, и программа все еще ломается. –
Крис, ничего не должно происходить в моей программе после запуска функции. Я написал gui без функций, и это сработало. Я написал функцию без gui, и она работает. Я поместил функцию в gui, и она вызывает функцию, заканчивается и возвращается в gui, но затем сработает, когда функция слота заканчивается. –