2015-09-24 4 views
1

J'ai donc une classe SnapshotPanel: public QListWidget que j'essaie d'ajouter de manière dynamique à QListWidgetItem, cependant quand j'essaie, j'obtiens un segfault. J'ai vérifié que mon code pour ajouter l'article est correct car je peux ajouter à la liste quand je construis mon SnapshotPanel. Cependant, je ne peux pas ajouter au panneau lorsque le code est appelé via les signaux et le slot, un aperçu de ce que je manque serait apprecié.Ajout de QListWidgetItem à QListWidget

Voici le constructeur:

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

Ainsi est-il une raison quelconque, je ne serais pas en mesure d'utiliser le code suivant lorsqu'il est appelé par des signaux et slots:

{ 
    QIcon icon("icon.jpeg"); 
    QListWidgetItem *widget = new QListWidgetItem(icon,"Earth"); 
    this->addItem(widget); 
} 
+0

Y a-t-il plusieurs threads impliqués? Pourquoi sous-classez-vous QListWidget? Où est le reste du code 'SnapshotPanel'? Est-ce Qt 4 ou Qt 5? –

+0

Quel signal utilisez-vous? Et où le connectez-vous à la fente? – agold

+0

Lors de la publication d'une question sur un problème de code, veuillez publier un exemple complet reproduisant le problème, ou au moins un code postal contenant le problème lui-même. Tout ce que vous avez montré est correct - et vous l'auriez su si vous avez simplement copié le code de votre question dans un nouveau projet et l'avez essayé vous-même. –

Répondre

0

Je pense qu'il devrait juste travailler. « Machines à sous sont normales C++ fonctions » selon the documentation.

Si vous utilisez plusieurs threads que vous devez regarder dans le mécanisme de connexion. Peut-être avez-vous besoin d'utiliser des connexions en file d'attente. Vous changeriez vos déclarations de connexion de:

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

à

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

Mais lisez le official documentation ici. Une question SO (vous renvoyant fondamentalement à la documentation) is here.

+0

"Si vous utilisez plusieurs threads, vous devez examiner le mécanisme de connexion. [...] Vous devez modifier vos instructions connect" C'est faux. La connexion automatique par défaut fait déjà la bonne chose. –