Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何使用要存储的额外数据自定义QListWidgetItem?_Qt_Customization_Qlistwidget - Fatal编程技术网

Qt 如何使用要存储的额外数据自定义QListWidgetItem?

Qt 如何使用要存储的额外数据自定义QListWidgetItem?,qt,customization,qlistwidget,Qt,Customization,Qlistwidget,QListWidgetItem包含2个数据:图标和文本。我想在其中存储另一个Q字符串。我该怎么办?这是我的测试代码。调用addItem后,ListWidget不会显示任何内容 我怎么知道点击了哪个项目?SLOT函数是“void on_listWidget_itemClicked(QListWidgetItem*item)”。显然,参数项是父类:QListWidgetItem,而不是子类:ListWidgetItem ListWidgetItem::ListWidgetItem(const QIc

QListWidgetItem包含2个数据:图标和文本。我想在其中存储另一个Q字符串。我该怎么办?这是我的测试代码。调用addItem后,ListWidget不会显示任何内容

我怎么知道点击了哪个项目?SLOT函数是“void on_listWidget_itemClicked(QListWidgetItem*item)”。显然,参数项是父类:QListWidgetItem,而不是子类: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);
}

要在类层次结构中上下移动,可以使用强制类型转换,在本例中为动态\u强制类型转换:

dynamic_cast<QListWidgetItem*>( your_item )
现在我们有了一个没有水平标题的表格(当然你不需要)。单击一行时,将选中整行并调用以下插槽:

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();
}
这只是一个简单的例子,我很快写了。。。当然,有更好的方法可以做到这一点,但也许这有助于解决你的问题


QListWidgetItem
具有成员函数

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


用于存储任意数据(包括
QString
)。设置
role=Qt::UserRole
(或任何更高的值)。

谢谢。但是QTableWidget不支持IconMode。我想在下面显示带有名称的图标,当单击时,应用程序可以获得项目信息,在我的情况下,IP。
void QListWidgetItem::setData ( int role, const QVariant & value )
QVariant QListWidgetItem::data ( int role ) const