Configure QListWidgetItem with additional data to store in, How?

QListWidgetItem contains 2 data: icon and text. And I want to keep another QString in it. How can i do Here is my test code. ListWidget does not display anything after addItem is called.

And how can I find out which item is clicked? The SLOT function is "void on_listWidget_itemClicked (QListWidgetItem * element)." Obviously, the parameter element is the parent class: QListWidgetItem, NOT a subclass: ListWidgetItem

ListWidgetItem::ListWidgetItem(const QIcon &icon, const QString &text,QString &ip, QListWidget *parent, int type)
{
    myip = ip;
    QListWidgetItem::QListWidgetItem(icon,text,parent,type);
}

ListWidgetItem::~ListWidgetItem()
{

}

QVariant ListWidgetItem::data(int role) const
{
    if (role==IPROLE)
    {
        return myip;
    }
    return QListWidgetItem::data(role);
}

void ListWidgetItem::setData(int role, const QVariant &value)
{
    if (role==IPROLE)
    {
        myip = value.toString();
    }
    QListWidgetItem::setData(role,value);
}
+5
source share
2 answers

QListWidgetItem has member functions

void QListWidgetItem::setData ( int role, const QVariant & value )

and

QVariant QListWidgetItem::data ( int role ) const

to store arbitrary data (including QString). Set role = Qt::UserRole(or any higher value).

+7

, dynamic_cast:

dynamic_cast<QListWidgetItem*>( your_item )

. ", QListWidgetItem, !"

QTableWidget. , , "" , , -)

Edit:

:

QTableWidgetItem. , QTableWidgetItem :-) , , QTableWidgetItems. , , , .

- , ListWidget. , -, cellClicked( int row, int column ) row , . , , .

, . . , . : IP, . , hideColumn( int column ).

4: [ 0: | 1: | 2: () IP]

, , IP- 2.

, , ... , , ... , - IP.

setShowGrid( false ). , - .

: -)

2:

, , . . .

m_table_widget = new QTableWidget( 4, 4, this );

QTableWidgetItem* my_item_0 = new QTableWidgetItem( "icon 1" );
QTableWidgetItem* my_item_1 = new QTableWidgetItem( "server 1" );
QTableWidgetItem* my_item_2 = new QTableWidgetItem( "this is server 1" );
QTableWidgetItem* my_item_3 = new QTableWidgetItem( "192.0.0.1" );

QTableWidgetItem* my_item_4 = new QTableWidgetItem( "icon 2" );
QTableWidgetItem* my_item_5 = new QTableWidgetItem( "server 2" );
QTableWidgetItem* my_item_6 = new QTableWidgetItem( "this is server 2" );
QTableWidgetItem* my_item_7 = new QTableWidgetItem( "192.0.0.2" );

m_table_widget->setItem( 0, 0, my_item_0 );
m_table_widget->setItem( 0, 1, my_item_1 );
m_table_widget->setItem( 0, 2, my_item_2 );
m_table_widget->setItem( 0, 3, my_item_3 );

m_table_widget->setItem( 1, 0, my_item_4 );
m_table_widget->setItem( 1, 1, my_item_5 );
m_table_widget->setItem( 1, 2, my_item_6 );
m_table_widget->setItem( 1, 3, my_item_7 );

m_table_widget->hideColumn( 3 );
m_table_widget->setShowGrid( false );
m_table_widget->setSelectionBehavior( QAbstractItemView::SelectRows );
m_table_widget->verticalHeader()->hide();

QStringList list;
list << "Icon" << "Name" << "Description" << "IP";
m_table_widget->setHorizontalHeaderLabels( list );

connect( m_table_widget, SIGNAL(cellClicked(int,int)), this, SLOT(on_cell_clicked(int,int)) );

( , ). :

void main_window::on_cell_clicked( int row, int column )
{
    QString ip = m_table_widget->item( row, 3 )->text();
    QMessageBox message( QMessageBox::Information, "Server Info", QString( "This is row %1 and the IP is: %2" ).arg( row ).arg( ip ) );

    message.exec();
}

, ... , , , , .

Example implementation in sandbox app

+6

All Articles