Qt::UserRole的作用


Qt::UserRole相當於一個索引的作用,對於一些Qt的組件有一個參數位置就需要Qt:;UserRole

void QComboBox::setItemData ( int index, const QVariant & value, int role = Qt::UserRole ); bool QStandardItemModel::setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole );

 

就例如使用一個QListWidget,里面有多個QListWidgetItem

你給每一個item存放了一些數據

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QListWidget *pListWidget = new QListWidget(this); int i = 0; do { ++i; QListWidgetItem *pItem = new QListWidgetItem(pListWidget); pItem->setData(Qt::UserRole, i); // 用戶數據
    pItem->setData(Qt::UserRole+1, i+1000); // 用戶數據(取不到)
    pItem->setData(Qt::UserRole + 1, QString("Qter %1").arg(i)); // 用戶數據
    pItem->setData(Qt::UserRole + 2, QString("取不到 %1").arg(i)); pItem->setText(QString("Item %1").arg(i)); // 文本
    pListWidget->addItem(pItem); } while (i < 5); // 連接信號槽
    connect(pListWidget, &QListWidget::itemClicked, this, &MainWindow::onItemClicked); }

 

如果點擊到某個item就會觸發對應的事件onItemClicked

void onItemClicked(QListWidgetItem *item) { int nID = item->data(Qt::UserRole).toInt(); // 獲取用戶數據
    QString strName = item->data(Qt::UserRole + 1).toString(); // 獲取用戶數據
    qDebug() << "UserRole: " << Qt::UserRole; qDebug() << "ID : " << nID; qDebug() << "Name : " << strName; }

 

通過我們存放數據的時候采用的“標識”——“Qt::UserRole”來獲取數據

 

除了這樣采用一個id存放一個基本數據類型(一個用戶如果有好多信息那就需要好多id),你可以采用結構體方式把用戶數據放在一個結構體中,這樣只需要一個id

// 用戶信息
 
struct User : QObjectUserData { int nID; // ID
 QString strName; // 用戶名
 }; // 語言
 typedef enum{ UI_ZH, // 中文
 UI_EN // 英文
 } LANGUAGE; Q_DECLARE_METATYPE(User) Q_DECLARE_METATYPE(LANGUAGE) /* 其中,User定義為QObjectUserData類型,為了后面setUserData()和userData()使用。如果不使用這兩個接口,則不需要定義為QObjectUserData。 絕大部分存儲用戶數據的接口都使用的是QVariant,也就是我們常說的“萬能變量”。對於自定義數據類型,如果要使用QVariant,就必須使用Q_DECLARE_METATYPE注冊。 */

 

QListWidget *pListWidget = new QListWidget(this);
 
int i = 0;
 
do {
 
++i;
 
QListWidgetItem *pItem = new QListWidgetItem(pListWidget);
 
User user;
 
user.nID = i;
 
user.strName = QString("Qter %1").arg(i);
 
pItem->setData(Qt::UserRole, QVariant::fromValue(user)); // 設置用戶數據
 
pItem->setText(QString("Item %1").arg(i));
 
pListWidget->addItem(pItem);
 
} while (i < 5);


void onItemClicked(QListWidgetItem *item)
 
{
QVariant variant = item->data(Qt::UserRole); // 獲取用戶數據
 
User user = variant.value<User>();
 
qDebug() << "ID : " << user.nID; qDebug() << "Name : " << user.strName;
 
}

 

參考鏈接:https://blog.csdn.net/sajdhfkjidkgjo/article/details/104685538/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM