Qt - use QListWidgetItem user data

From TaskDepender
Jump to: navigation, search
(Custom class definition)
(Implementation)
 
Line 3: Line 3:
 
== Introduction ==
 
== Introduction ==
  
The <tt>QListWidgetItem</tt> has an attribute:
+
The <tt>QListWidgetItem</tt><ref>[http://developer.qt.nokia.com/doc/qt-4.8/qlistwidgetitem.html QListWidget Class Reference - Qt 4.8]</ref> has an attribute:
  
 
<syntaxhighlight lang="cpp-qt">
 
<syntaxhighlight lang="cpp-qt">
QVariant QListWidgetItem data (int role )const [virtual]
+
QVariant QListWidgetItem data(int role)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Line 25: Line 25:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
To ensure that the class is compatible with QVariant, the following is added <ref>[http://doc.qt.nokia.com/4.7-snapshot/qmetatype.html QMetaType Class Reference - Qt 4.7 reference]</ref>:
+
To ensure that the class is compatible with QVariant, the following is added<ref>[http://developer.qt.nokia.com/doc/qt-4.8//qmetatype.html QMetaType Class Reference - Qt 4.8 reference]</ref>:
  
 
<syntaxhighlight lang="cpp-qt">
 
<syntaxhighlight lang="cpp-qt">
Line 43: Line 43:
  
 
== Implementation ==
 
== Implementation ==
 +
 +
TODO: create actual small application.
 +
 +
=== Add item ===
  
 
<syntaxhighlight lang="cpp-qt">
 
<syntaxhighlight lang="cpp-qt">
void MainWindow::on_pushButton_clicked()
+
void MainWindow::addItem()
 
{
 
{
 +
    // Local temporary variables.
 
     MyCustomClass myClass;
 
     MyCustomClass myClass;
 
     QVariant      qv;
 
     QVariant      qv;
  
 
     myClass.a = ui->valueLineEdit->text().toInt();
 
     myClass.a = ui->valueLineEdit->text().toInt();
 +
   
 +
    // Use content of local variable and copy.
 
     qv.setValue(myClass);
 
     qv.setValue(myClass);
  
Line 56: Line 63:
 
     qlwi->setText(ui->textLineEdit->text());
 
     qlwi->setText(ui->textLineEdit->text());
  
 +
    // Copy the local qvariant and store with list item.
 
     qlwi->setData(Qt::UserRole,qv);
 
     qlwi->setData(Qt::UserRole,qv);
 
     ui->listWidget->addItem(qlwi);
 
     ui->listWidget->addItem(qlwi);
Line 61: Line 69:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
+
=== Display data ===
  
 
<syntaxhighlight lang="cpp-qt">
 
<syntaxhighlight lang="cpp-qt">
void MainWindow::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
+
void MainWindow::displayData(QListWidgetItem *item)
 
{
 
{
     textLineEdit->setText(current->text());
+
     textLineEdit->setText(item->text());
     MyCustomClass myClass = current->data(Qt::UserRole).value<MyCustomClass>();
+
     MyCustomClass myClass = item->data(Qt::UserRole).value<MyCustomClass>();
 
     ui->lineEdit->setText(QString("%1").arg(myClass.a));
 
     ui->lineEdit->setText(QString("%1").arg(myClass.a));
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
=== Change data ===
  
 
<syntaxhighlight lang="cpp-qt">
 
<syntaxhighlight lang="cpp-qt">
void MainWindow::on_pushButton_2_clicked()
+
void MainWindow::changeData(QListWidgetItem *item)
 
{
 
{
  
     QVariant *qv = &ui->listWidget->currentItem()->data(Qt::UserRole);
+
     QVariant *qvPtr = item->data(Qt::UserRole);
  
     MyCustomClass myClass =
+
     MyCustomClass myClass = qvPtr->value<MyCustomClass>();
            ui->listWidget->currentItem()->data(Qt::UserRole).value<MyCustomClass>();
+
  
 
     myClass.a += 1;
 
     myClass.a += 1;
  
     qv->setValue(myClass);
+
     qvPtr->setValue(myClass);
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>

Latest revision as of 09:30, 24 December 2011

Personal tools