Итак, у меня есть класс SnapshotPanel: public QListWidget, к которому я пытаюсь динамически добавить QListWidgetItem, однако, когда бы я ни пытался, я получаю ошибку сегмента. Я подтвердил, что мой код для добавления элемента правильный, так как я могу добавить его в список при создании SnapshotPanel. Однако я не могу добавить на панель, когда код вызывается с помощью сигналов и слотов, понимание того, что мне не хватает, будет оценено.
Вот конструктор:
SnapshotPanel::SnapshotPanel(QWidget *parent):QListWidget(parent)
{
this->setViewMode(QListWidget::IconMode);
this->setIconSize(QSize(256,256));
this->setResizeMode(QListWidget::Adjust);
QIcon icon("icon.jpeg");
QListWidgetItem *widget = new QListWidgetItem(icon,"Earth");
this->addItem(widget);
}
Поэтому есть ли причина, по которой я не смог бы использовать следующий код при вызове через сигналы и слоты:
{
QIcon icon("icon.jpeg");
QListWidgetItem *widget = new QListWidgetItem(icon,"Earth");
this->addItem(widget);
}
Я думаю, что это должно просто работать. «Слоты — это нормальные функции C ++» согласно документация.
Если вы используете несколько потоков, вам нужно изучить механизм подключения. Возможно, вам нужно использовать очереди соединений. Вы бы изменили свои операторы подключения с:
connect(button, &QPushButton::clicked, this, &MainWidget::on_button_clicked);
в
connect(button, &QPushButton::clicked, this, &MainWidget::on_button_clicked, Qt::QueuedConnection);
Но прочитайте официальная документация Вот. ТАК вопрос (в основном указывающий вам обратно на документацию) это здесь.
Других решений пока нет …