2015-09-24 22 views
1

Итак, у меня есть класс SnapshotPanel: public QListWidget, который я пытаюсь добавить QListWidgetItem динамически, однако когда-либо я пытаюсь получить segfault. Я подтвердил, что мой код для добавления элемента является правильным, поскольку я могу добавить его в список, когда я создаю свою SnapshotPanel. Однако я не могу добавить к панели, когда код вызывается через сигналы и слот, понимание того, что мне не хватает, будет оценено.Добавление QListWidgetItem в QListWidget

Вот конструктор:

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); 
} 
+0

Имеются ли несколько потоков? Почему вы подклассифицированы из 'QListWidget'? Где находится остальная часть кода «SnapshotPanel»? Это Qt 4 или Qt 5? –

+0

Какой сигнал вы используете? И где вы подключаете его к слоту? – agold

+0

При отправке вопроса о проблеме с кодом, пожалуйста, напишите полный пример, который воспроизводит проблему, или, по крайней мере, пост-код, который сам имеет проблему. Все, что вы показали правильно, - и вы сами знали бы, что если бы вы только скопировали код из своего вопроса в новый проект и попробовали его самостоятельно. –

ответ

0

Я думаю, он должен просто работай. «Слоты нормальная C++ функция» по the documentation.

Если вы используете несколько потоков, нужно заглянуть в механизм соединения. Возможно, вам нужно использовать очереди в очереди. Вы могли бы изменить вашу связную заявления от:

connect(button, &QPushButton::clicked, this, &MainWidget::on_button_clicked); 

в

connect(button, &QPushButton::clicked, this, &MainWidget::on_button_clicked, Qt::QueuedConnection); 

Но читать official documentation здесь. Вопрос SO (в основном указывая на документацию) is here.

+0

«Если вы используете несколько потоков, вам нужно заглянуть в механизм соединения. [...] Вы изменили бы свои заявления о подключении« Это неверно. По умолчанию автоматическое соединение уже делает правильные вещи. –