Qt之QListView和QStandardItemModel用法
阿新 • • 發佈:2021-08-23
note
- 個人理解, QListView 用於 顯示資料,而資料的邏輯維護則由 QStandardItemModel 完成.
QStandardItemModel 建立
if (nullptr == pchannel_list_view_model_)
pchannel_list_view_model_ = new(std::nothrow) QStandardItemModel(ui->channel_list_view);
QListView新增QStandardItemModel
- 繫結資料來源
/// 繫結資料來源 ui->channel_list_view->setModel(pchannel_list_view_model_);
QListView設定為不可編輯
/// 設定為不可編輯
ui->channel_list_view->setEditTriggers(QAbstractItemView::NoEditTriggers);
新增行
standard_item_ex* item1 = new(std::nothrow) standard_item_ex(tr("new_channel"));
pchannel_list_view_model_->appendRow(item1);
note
- standard_item_ex 的原型如下, 我對其做了擴充套件
class standard_item_ex : public QStandardItem { public: explicit standard_item_ex(const QString& str_txt); standard_item_ex(const QIcon &icon, const QString &text); ~standard_item_ex(); .... }
QListView 顯示新增資料
ui->channel_list_view->update();
QListView滾動的最下面
ui->channel_list_view->scrollToBottom();
QListView獲取選中的行
QItemSelectionModel *selmodel = ui->channel_list_view->selectionModel(); if (selmodel) { /// 解析: indexlist 即可 QModelIndexList indexlist = selmodel->selectedIndexes(); }
獲取選擇的行和列
- 這裡演示了 繫結的doublelciked的訊號 和 下文的槽函式
void channel_widget::slot_list_view_item_double_clicked_(const QModelIndex & model_index)
{
/// 得到行列索引
int row_index = model_index.row();
int column_index = model_index.column();
}
根據行和列獲取item
const int channel_row_index = 0;
const int column_index = 0;
QModelIndex& model_index = pchannel_list_view_model_->index(channel_row_index, column_index);
pchannel_list_view_model_->setData(model_index, str_new_name);
作者:mohistH
出處:https://www.cnblogs.com/pandamohist/
本文版權歸作者和部落格園共有,謝絕一切形式的轉載,否則將追究法律責任。