zoukankan      html  css  js  c++  java
  • 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 <QDialog>
    #include <QStringListModel>
    #include <QListView>
    #include <QDialogButtonBox>
    
    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 <QPushButton>
    #include <QVBoxLayout>
    
    #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 <QApplication>
    
    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();
    }
    


     

  • 相关阅读:
    python模块——socket (实现简单的C/S架构端通信操作CMD)
    English trip -- VC(情景课)3 C Do you have a sister?(maple verstion)
    防止文件被恢复
    English trip -- MC(情景课)3 C Do you have a sister?
    English trip -- VC(情景课)3 B Bamily members
    English trip -- MC(情景课)6 Time
    TCP三次握手(待细研究)
    English trip -- VC(情景课)3 A Family
    English trip -- Phonics 4 元音字母 i
    心情随笔20180718
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3089356.html
Copyright © 2011-2022 走看看