Qt学习:项视图类之QStringListModel和QListView

QListView是不显示表头和表框的,如果要显示,可以使用QTreeView来

view的显示属性分为列表list显示和icon图标显示,使用
QListView::setViewMode()来设置,默认为list型的

QListView::setModel ()用来设置view所关联的model

获取view中当前的位置,QListView::currentIndex(),返回的是QModelIndex类型的
设置当前行使用QListView::setCurrentIndex(QModelIndex),
设置某行可以编辑,使用QListView::edit(QModelIndex)

当某个QModelIndex被移动时候,信号indexesMoved(QModelIndexList)被发射
当双击某项时候,信号doubleClicked(QModelIndex)被发射
当大几某项时候,信号clicked(QModelIndex)被发射

QStringListModel就是封装了QStringList的model。QStringList是一种很常用的数据类型,它实际上是一个字符串列表。我们可以想象,对于一个list来说,如果提供一个字符串列表形式的数据,就应该能够把这个数据展示出来。因为二者是一致的:QStringList是线性的,而list也是线性的。所以,QStringListModel很多时候都会作为QListView的model。
model使用insertRows,insertRow来添加多行或一行,使用setData()来设置该行的数据
rowCount()用来获改model的行数
removeRows()和removeRow()用来删除model中的一行或多行,详见API手册。 

下边给出例子,照例,我们先给出效果:






整个例子用了一个QListView,一个QStirngListModel和一个QDialogButtonBox,构造函数接收一个存储着QString的QStringList用来初始化QStringListModel,然后用QListView的setModel()函数把数据和model联系起来。这里我们可以很清楚的看到MVC架构的各个部分是如何关联起来的:QStringListModel是一组数据集,存储的是一系列字符串数据;QListView是视图类,是一个窗口部件,用来观察这组数据;一些和它关联的操作,我们统称为控制(insert,delete等) 。下面给出代码:

//teamleadersdialog.h
#ifndef TEAMLEADERSDIALOG_H
#define TEAMLEADERSDIALOG_H

#include
#include
#include
#include

class TeamLeadersDialog : public QDialog
{
Q_OBJECT

public:
TeamLeadersDialog(const QStringList &leaders, QWidget *parent = 0);
~TeamLeadersDialog();

private slots:
void insert();
void del();

private:
QStringListModel *model;
QListView *listView;
QDialogButtonBox *buttonBox;
};

#endif // TEAMLEADERSDIALOG_H

//teamleadersdialog.cpp
#include
#include

#include “teamleadersdialog.h”

TeamLeadersDialog::TeamLeadersDialog(const QStringList &leaders, QWidget *parent)
QDialog(parent)
{
model = new QStringListModel(this);
model->setStringList(leaders);
listView = new QListView;
listView->setModel(model);
listView->setEditTriggers(QAbstractItemView::AnyKeyPressed
                          | QAbstractItemView::DoubleClicked);

buttonBox = new QDialogButtonBox;
QPushButton *insertButton = buttonBox->addButton(
            tr("&Insert"),QDialogButtonBox::ActionRole);
QPushButton *deleteButton = buttonBox->addButton(
            tr("&Delete"), QDialogButtonBox::ActionRole);
buttonBox->addButton(QDialogButtonBox::Ok);
buttonBox->addButton(QDialogButtonBox::Cancel);

connect(insertButton, SIGNAL(clicked()), this, SLOT(insert()));
connect(deleteButton, SIGNAL(clicked()), this, SLOT(del()));
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));

QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(listView);
layout->addWidget(buttonBox);
setLayout(layout);

setWindowTitle(tr("QStringListModel"));

}

void TeamLeadersDialog::insert()
{
int row = listView->currentIndex().row();
model->insertRows(row, 1);

QModelIndex index = model->index(row);
listView->setCurrentIndex(index);
listView->edit(index);

}

void TeamLeadersDialog::del()
{
model->removeRows(listView->currentIndex().row(), 1);
}

TeamLeadersDialog::~TeamLeadersDialog()
{
}

//main.cpp
#include “teamleadersdialog.h”
#include

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QStringList list;
list << QObject::tr(“xianziyu”)
<< QObject::tr(“yangwangming”)
<< QObject::tr(“yinshixin”)
<< QObject::tr(“baichengshuang”)
<< QObject::tr(“zhangzurui”);
TeamLeadersDialog w(list);
w.show();

return a.exec();

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值