para mover hacia arriba y hacia abajo en la jerarquía de clases puede utilizar moldes, en este caso dynamic_cast:
dynamic_cast<QListWidgetItem*>(your_item)
Usted puede usar esto como su parámetro para sus señales y ranuras. Esto le dirá a la función de recepción "¡Oye, esto solía ser un puntero en un QListWidgetItem, así que trátalo así!"
Y para mostrar más información usted debe considerar el uso de QTableWidget lugar. Creo que se ajuste a sus necesidades y que no tendría que ir a ese desvío sobre la información "contrabando" como lo hizo ;-)
Editar:
Como respuesta a su comentario:
Eche un vistazo al QTableWidgetItem. Verá que un QTableWidgetItem también puede tener un ícono :-) Entonces, lo que necesita hacer es dividir su información en varios QTableWidgetItems. Tiene un elemento para el icono, el texto y otro para otro texto y lo que necesita.
Ahora cada fila es lo que tenía antes como un elemento en un ListWidget. Ahora, tan pronto como el usuario haga clic en algún lugar, use la señal cellClicked(int row, int column)
y row
le indica en qué fila se ha hecho clic. Ahora tiene la fila en la que se ha hecho clic y puede obtener la información que está buscando.
permite decir que el usuario hace clic en la cuarta fila. Cada fila tiene columnas. La primera columna contiene el icono, la segunda columna contiene el nombre. Y ahora lo especial: la tercera columna contiene el IP, pero es oculto. Puede hacerlo, usando hideColumn(int column)
.
Fila 4: [0 Columna: Icono | Columna 1: Nombre | Columna 2: (oculto) IP]
Así que cada vez que el usuario hace clic en una fila, que acaba de ver la IP en el número de columna 2.
Por supuesto puede agregar tanto las células como quiera ... Uno que contiene la cadena con el nombre, otra con una descripción ... Y digamos que la última columna es tu columna oculta con la IP.
También puede hacer que la cuadrícula invisible mediante el uso de setShowGrid(false)
. Ahora parece una visualización normal de información, donde cada fila es un elemento.
:-)
Edición 2:
Para mostrar lo que quiero decir que he implementado un pequeño ejemplo. Vea el código a continuación.
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)));
Ahora tenemos una tabla sin cuadrícula con encabezados horizontales (que no necesita, por supuesto). Al hacer clic en una fila, se selecciona toda la fila y la siguiente ranura se llama:
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();
}
Esto es sólo un ejemplo sencillo rápidamente escribí ... Hay mejores maneras de hacer esto, por supuesto, pero tal vez ayuda a resolver su problema
Gracias. Pero QTableWidget no es compatible con IconMode. Quiero mostrar íconos con los nombres a continuación; al hacer clic en ellos, la aplicación puede obtener la información del ítem, en mi caso, IP. – catinred
Ver mi publicación editada :) – Exa
Otra edición con código de ejemplo e imagen. – Exa