Добавить объект в QListWidget

у меня есть класс

class MyClass
 {
  public:
  QString name;
  int age;
 };
...
MyClass* itm1= new MyClass();
itm1->name="John";
itm1->age=20;

Я хочу добавить itm1 в QListWidget, который будет отображать itm1->name, и когда я дважды щелкну элемент в списке, чтобы показать мне itm1->age в окне сообщения. Любая помощь приветствуется!


person john smith    schedule 10.02.2015    source источник


Ответы (2)


Я бы попробовал:

Элемент QListWidgetItem(itm1->имя); item.setData(Qt::UserRole, itm1); добавьте это в QListWidget.

slot: void itemActivated ( QListWidgetItem * item ) и получите ваши пользовательские данные из элемента.

Другая возможность, если у вас есть список ваших элементов (и его нельзя изменить во время обработки клика), сохранить индекс внутри пользовательских данных. (Я использую второй подход в некоторых полях со списком в Qt4)

person edisn    schedule 10.02.2015

Это должно работать.

QListWidget* listWidget = new QListWidget();
connect(listwidget, SIGNAL (itemDoubleClicked(QListWidgetItem*)), yourClass, SLOT(itemDoubleClicked(QListWidgetItem*)));

MyClass* itm1= new MyClass();
itm1->name="John";
itm1->age=20;

QListWidgetItem* item(itm1->name);
item->setData(Qt::UserRole, itm1->age);
listWidget->addItem(item);

Затем просто добавьте это как слот.

void YourClass::itemDoubleClicked(QListWidgetItem* item) {
    int age = item->data(Qt::UserRole);
    QMessageBox messageBox;
    messageBox.setText(QString::number(age));
    messageBox.exec();
}
person Corvus    schedule 12.08.2019