1

したがって、クラス SnapshotPanel : public QListWidget を動的に QListWidgetItem に追加しようとしていますが、それを試みるたびに segfault が発生します。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);
}
4

1 に答える 1

0

うまくいくはずだと思います。ドキュメントによると、 「スロットは通常の C++ 関数です」 。

複数のスレッドを使用している場合は、接続メカニズムを調べる必要があります。おそらく、キュー接続を使用する必要があります。connect ステートメントを次のように変更します。

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

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

ただし、こちらの公式ドキュメントをお読みください。SO の質問 (基本的にドキュメントに戻るように指示するもの)はこちらです。

于 2015-09-25T06:45:20.140 に答える