`
qimo601
  • 浏览: 3445844 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

(二)使用预定义模型 QStringListModel例子

    博客分类:
  • Qt
阅读更多

目录:

(一) Qt Model/View 的简单说明 、预定义模型

(二)使用预定义模型 QstringListModel例子

(三)使用预定义模型QDirModel的例子

(四)Qt实现自定义模型基于QAbstractTableModel

(五)Qt实现自定义模型基于QAbstractItemModel 

(六) Qt实现自定义委托 QDelegate

 

使用预定义模型 QStringListModel例子

 

源代码如下

Main.cpp

 

#include <QApplication>

#include "teamleadersdialog.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    //字符串数组
    QStringList leaders;
    leaders << "Stooge Viller" << "Littleface" << "B-B Eyes"
            << "Pruneface" << "Mrs. Pruneface" << "The Brow"
            << "Vitamin Flintheart" << "Flattop Sr." << "Shakey"
            << "Breathless Mahoney" << "Mumbles" << "Shoulders"
            << "Sketch Paree";

    //对话框
    TeamLeadersDialog dialog(leaders);
    dialog.show();

    return app.exec();
}

 

 

teamleadersdialog.h

 

#ifndef TEAMLEADERSDIALOG_H
#define TEAMLEADERSDIALOG_H

#include <QDialog>

class QDialogButtonBox;
class QListView;
class QStringListModel;

class TeamLeadersDialog : public QDialog
{
    Q_OBJECT

public:
    //构造函数
    TeamLeadersDialog(const QStringList &leaders, QWidget *parent = 0);

    QStringList leaders() const;

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

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

#endif

 

teamleadersdialog.cpp

 

#include <QtGui>

#include "teamleadersdialog.h"

TeamLeadersDialog::TeamLeadersDialog(const QStringList &leaders,
                                     QWidget *parent)
    : QDialog(parent)
{
    //创建并组装一个QStringListModel
    model = new QStringListModel(this);
    model->setStringList(leaders);

    //创建一个QListView
    listView = new QListView;
    //设置模型
    listView->setModel(model);
    //设置QListView编辑触发器:通过开始输入或者双击进入编辑字符串的状态
    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()));
    //按钮盒的ok和Cancel事件
    connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
    connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));

    //界面竖直布局listView和buttonBox
    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(listView);
    mainLayout->addWidget(buttonBox);
    //设置当前窗口的布局为mainLayout
    setLayout(mainLayout);

    setWindowTitle(tr("Team Leaders"));
}
//获取当前模型中的内容
QStringList TeamLeadersDialog::leaders() const
{
    return model->stringList();
}

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()
{
    //从目前行开始,共删除1行model数据,并自动更新列表视图
    model->removeRows(listView->currentIndex().row(), 1);
}

 

分享到:
评论

相关推荐

    QT5.5 Demo

    在QT框架中,ItemView类是用于展示数据集的一种通用视图,它能够灵活地显示各种类型的数据,并且可以与不同的模型(如QStringListModel、QStandardItemModel或自定义模型)配合使用。这个Demo主要涵盖了以下知识点:...

    view2.tar.gz_QListWidget_QTableWidget_Qt Qtablewidget_QtreeWidge

    在Qt中,它们都可以绑定到各种数据模型,如`QStringListModel`、`QStandardItemModel`或自定义模型,从而实现数据驱动的界面。 为了更好地理解和实践这些组件的用法,可以参考压缩包中的`view2`文件。这个示例可能...

    addressBook

    数据存储方面,Qt4提供了多种数据模型,如QStringListModel、QStandardItemModel等,可以用来展示和管理结构化数据。在addressBook应用中,可能使用QStandardItemModel来表示联系人列表,每一项代表一个联系人的信息...

    QT学习教程

    了解如何实现和使用不同的模型类(如QStringListModel)以及视图类(如QTableView)是高级QT编程的一部分。 6. **网络编程**:QT提供了网络模块,支持TCP、UDP通信,可以创建HTTP客户端和服务器。这使得开发者能够...

    《QT5.9C++开发指南》源码

    `QTableView`、`QListView`等视图类可以绑定到`QAbstractTableModel`、`QStringListModel`等模型类,实现数据的动态更新。 8. **网络编程**: Qt5.9提供了强大的网络编程支持,如`QTcpSocket`、`QUdpSocket`、`...

    QListView和QListWidget

    在这个例子中,我们创建了一个QStringListModel,设置了字符串列表,并将其关联到QListView上,使得QListView能显示这些字符串。 **QListWidget与Item-Based架构** 相比之下,QListWidget采用的是更传统的item-...

    python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例

    QTableWidget虽然简单易用,但它的数据模型相对固定,只能使用标准的QTableWidgetItem对象来存储单元格数据。 **QTableView可用的模型:** QTableView可以绑定多种类型的数据模型,每种模型都有特定的用途: 1. **...

    Qt学习之路 绝对经典

    Qt提供了多种预定义的对话框类,如`QFileDialog`、`QColorDialog`等,这些对话框可以用来让用户选择文件、颜色等。下面是一个使用`QFileDialog`的例子: ```cpp #include #include #include #include #include ...

    contactlist.zip

    2. **Model/View/Delegate模型**:在QML中,数据模型(Model)可以是任何支持Qt的模型类,如QStringListModel或QStandardItemModel。在这里,我们可以创建一个自定义的QML类型来表示联系人,然后将其用作ListView的...

    Qt 控件 实现 QComboBox输入自动提示功能(仿Google搜索提示)-C++代码类资源

    在这个例子中,我们创建了一个名为`AutoSuggestComboBox`的自定义类,继承自QComboBox。我们添加了一个槽函数`onTextChanged()`,该槽函数会在用户输入发生变化时被调用。`filterData()`函数负责根据输入文本过滤...

Global site tag (gtag.js) - Google Analytics