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);