당신이 캐스트를 사용할 수있는 클래스 계층 구조에서 아래로 이동,이 경우 dynamic_cast는에 :
dynamic_cast<QListWidgetItem*>(your_item)
당신 이것을 신호 및 슬롯의 매개 변수로 사용할 수 있습니다. 이 함수는 "이봐 요, 이건 QListWidgetItem의 포인터이기 때문에 그렇게 취급하십시오!"라고 알려줄 것입니다.
그리고 더 많은 정보를 표시하려면 대신 QTableWidget 사용을 고려해야합니다. 그게 당신의 필요 조건에 맞는 것이라고 생각하고 당신은 당신이했던 것처럼 "밀수"정보를 통해 그 우회로를 갈 필요가 없습니다 것입니다 ;-)
편집 :
: 귀하의 코멘트에 대한 응답으로
QTableWidgetItem을보십시오. QTableWidgetItem도 아이콘을 가질 수 있습니다 .-) 그래서 당신이해야 할 일은 정보를 여러 개의 QTableWidgetItems로 나누는 것입니다. 아이콘에 대한 항목, 텍스트에 대한 항목 및 다른 텍스트에 대한 항목 및 필요한 항목이 있습니다.
이제 모든 행은 이전에 ListWidget에서 하나의 항목으로 있었던 항목입니다. 이제 사용자가 어딘가를 클릭하자마자 cellClicked(int row, int column)
및 row
신호를 사용하여 클릭 한 행을 알 수 있습니다. 이제 행을 클릭하여 찾고있는 정보를 얻을 수 있습니다.
사용자가 네 번째 행을 클릭한다고 가정 해 보겠습니다. 각 행에는 열이 있습니다. 첫 번째 열은 아이콘을 포함하고 두 번째 열은 이름을 포함합니다. 이제 특수한 것 : 세 번째 열에는 IP가 있지만 은입니다. hideColumn(int column)
을 사용하면됩니다.
행 4 : [열 0 : 아이콘 | 1 열 : 이름 | 열이 : (알 수 없음) 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();
}
이 내가 빨리 썼다 ... 물론이 일을 더 나은 방법이있다 단순한 예이지만, 어쩌면 그것을 문제를 해결하는 데 도움이됩니다.

감사합니다. 그러나 QTableWidget은 IconMode를 지원하지 않습니다. 나는 아래의 이름으로 아이콘을 표시하고 싶을 때, 클릭하면 앱이 내 정보의 항목 정보를 얻을 수있다. – catinred
내 편집 된 게시물보기 :) – Exa
예제 코드와 그림을 사용한 또 다른 편집. – Exa