1. 程式人生 > 其它 >Qt之QListView和QStandardItemModel用法

Qt之QListView和QStandardItemModel用法

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/ 本文版權歸作者和部落格園共有,謝絕一切形式的轉載,否則將追究法律責任。