【问题标题】:Adding QListWidgetItem To QListWidget将 QListWidgetItem 添加到 QListWidget
【发布时间】:2015-09-24 19:46:49
【问题描述】:

所以我有一个类 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);
}

【问题讨论】:

  • 是否涉及多个线程?你为什么要从QListWidget 继承? SnapshotPanel 代码的其余部分在哪里?这是 Qt 4 还是 Qt 5?
  • 你使用什么信号?你在哪里将它连接到插槽?
  • 在发布有关代码问题的问题时,请发布重现问题的完整示例,或者至少发布本身存在问题的代码。您所展示的一切都是正确的 - 如果您只是将问题中的代码复制粘贴到一个新项目中并自己尝试一下,您自己就会知道。

标签: c++ qt qlistwidget qt-signals qlistwidgetitem


【解决方案1】:

我认为它应该可以正常工作。 “插槽是普通的 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

【讨论】:

  • “如果你使用多个线程,你需要查看连接机制。[...] 你会改变你的连接语句” 那是错误的。默认的自动连接已经做了正确的事情。
猜你喜欢
  • 2017-12-28
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多