1.  QStringListModel , 实现 插入 删除 编辑 list,支持鼠标双击编辑。

2. dialog.h

#ifndef DIALOG_H
#define DIALOG_H #include <QDialog>
#include <QtGui> class Dialog : public QDialog
{
Q_OBJECT public:
Dialog(const QStringList &leaders, QWidget *parent = 0); public slots:
void insertName();
void deleteName();
void editName(); private:
QListView *listView;
QStringListModel *model; }; #endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include <QtGui> Dialog::Dialog(const QStringList &leaders,QWidget *parent)
: QDialog(parent)
{
model = new QStringListModel;
model->setStringList(leaders); listView = new QListView;
listView->setModel(model); QPushButton *insertButton = new QPushButton(tr("insert"));
QPushButton *deleteButton = new QPushButton(tr("delete"));
QPushButton *editButton = new QPushButton(tr("edit"));
connect(insertButton, SIGNAL(clicked()), this, SLOT(insertName()));
connect(deleteButton, SIGNAL(clicked()), this, SLOT(deleteName()));
connect(editButton, SIGNAL(clicked()), this, SLOT(editName())); QHBoxLayout *hLayout = new QHBoxLayout;
hLayout->addWidget(insertButton);
hLayout->addWidget(deleteButton);
hLayout->addWidget(editButton);
QVBoxLayout *vLayout = new QVBoxLayout;
vLayout->addWidget(listView);
vLayout->addLayout(hLayout); setLayout(vLayout);
} void Dialog::insertName()
{
bool ok;
QString name = QInputDialog::getText(this, tr("New Name"), tr(""),
QLineEdit::Normal, tr(""), &ok );
if( ok && !name.isEmpty() )
{
int row = listView->currentIndex().row();
model->insertRows(row,1);
QModelIndex index = model->index(row);
model->setData(index, name);
listView->setCurrentIndex(index);
}
} void Dialog::deleteName()
{
model->removeRows(listView->currentIndex().row(), 1);
} void Dialog::editName()
{
int row = listView->currentIndex().row();
QModelIndex index = model->index(row);
QVariant variant = model->data(index, Qt::DisplayRole);
QString name = variant.toString();
bool ok;
name = QInputDialog::getText(this, tr("Edit name"), tr(""), QLineEdit::Normal, tr(""), &ok);
if( ok && !name.isEmpty() )
{
row = listView->currentIndex().row();
index = model->index(row);
model->setData(index, name);
listView->setCurrentIndex(index);
}
}

main.cpp

#include "dialog.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv); QStringList leaders;
leaders << "test1" << "test2" << "test3" ;
Dialog w(leaders);
w.show(); return a.exec();
}

QT QStringListModel 示例代码的更多相关文章

  1. Qt QSortFilterProxyModel示例代码, 使用方法

    1. QSortFilterProxyModel不能单独使用,它只是一个"代理",真正的数据需要另外的一个model提供,而且它是用来排序和过滤的. 2. 实现代码 #ifndef ...

  2. PyQt(Python+Qt)学习随笔:工具箱(QToolBox)编程使用的步骤及示例代码

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 使用toolBox开发应用时,通过Designer设计ui界面时,只能在Designer中设计too ...

  3. python开源项目及示例代码

    本页面是俺收集的各种 Python 资源,不定期更新. 下面列出的各种 Python 库/模块/工具,如果名称带超链接,说明是第三方的:否则是 Python 语言内置的. 1 算法 1.1 字符串处理 ...

  4. C/C++ 开源库及示例代码

    C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...

  5. python开源项目及示例代码(转)

    本页面是俺收集的各种 Python 资源,不定期更新. 下面列出的各种 Python 库/模块/工具,如果名称带超链接,说明是第三方的:否则是 Python 语言内置的. 1 算法 1.1 字符串处理 ...

  6. 基于DotNetOpenAuth的OAuth实现示例代码: 获取access token

    1. 场景 根据OAuth 2.0规范,该场景发生于下面的流程图中的(D)(E)节点,根据已经得到的authorization code获取access token. 2. 实现环境 DotNetOp ...

  7. 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题

    调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...

  8. ActiveMQ笔记(1):编译、安装、示例代码

    一.编译 虽然ActiveMQ提供了发布版本,但是建议同学们自己下载源代码编译,以后万一有坑,还可以尝试自己改改源码. 1.1 https://github.com/apache/activemq/r ...

  9. C#微信公众平台接入示例代码

    http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html 这是微信公众平台提供的接入指南.官网只提供了php的示例代码 ...

随机推荐

  1. COGS 693. [SDOI2005]Antiprime数 唯一分解定理逆用

    693. Antiprime数 ★★   输入文件:antip.in   输出文件:antip.out   简单对比 时间限制:1 s   内存限制:128 MB 如果一个自然数n(n>=1), ...

  2. 爬虫实战【7】Ajax解析续-今日头条图片下载

    昨天我们分析了今日头条搜索得到的信息,一直对图集感兴趣的我还是选择将所有的图片下载下来. 我们继续讲一下如何通过各个图集的url得到每个图集下面的照片. 分析图集的组成 [插入图片,某个图集的页面] ...

  3. 将方法定义在prototype上的好处

    通常js类定义和使用的是这样的: var Class=function(){}; Class.prototype.sharedFn=function(){}; var instanceA=new Cl ...

  4. Object-Oriented Metrics: LCOM 内聚性的度量

    Object-Oriented Metrics: LCOM https://www.computing.dcu.ie/~renaat/ca421/LCOM.html Object-Oriented M ...

  5. Linux中权限管理之文件属性权限

    chattr [+-=][选项] 文件或目录名 + 增加权限 - 删除权限 = 等于某权限 选项: i 文件设置i属性,不允许对文件进行删除.改名.添加.修改数据,相当于把整个文件锁起来了 目录设置i ...

  6. 查看hive的配置信息

    在启动hive时设置配置属性信息 $ bin/hive --hiveconf <property=value> 查看当前所有的配置信息 hive > set ; hive (db_h ...

  7. BAPI_ACC_DOCUMENT_POST 解决原因代码输入问题-利用BADI

    (1)    复制函数SAMPLE_INTERFACE_RWBAPI01为Z SAMPLE_INTERFACE_RWBAPI01 *"---------------------------- ...

  8. vim插件快捷键

    @1:winmanager: #1:打开winmanager的快捷键在.vimrc中配置,默认为":WMToggle",使用nmap可以将其映射到其他的命令. #2:netrw快捷 ...

  9. Way to Git

    最近在学习Git,我先后在CentOS6.4, Ubuntu12.04, Windows7上安装Git,遇到的问题比较多的是在CentOS上的安装,Ubuntu和Windows7上的安装相对比较简单, ...

  10. IMG图片下面出现空格、下边距的解决办法

    放图片的时候总有一个间隔,加上div看,是图片未充满div.最后父级元素加了一个 font-size:0,去掉了间隔. <div class="cut-img" style= ...