视图模型

视图模型

QFileSystemModel

属性字段:

enum Roles { FileIconRole, FilePathRole, FileNameRole, FilePermissions }
nameFilterDisables : bool
readOnly : bool
resolveSymlinks : bool

函数 作用
QIcon fileIcon(const QModelIndex &index) const 文件图标
QFileInfo fileInfo(const QModelIndex &index) const 文件信息
QString fileName(const QModelIndex &index) const 文件名
QString filePath(const QModelIndex &index) const 文件路经
QDir::Filters filter() const 筛选
QFileIconProvider * iconProvider() const
QModelIndex index(const QString &path, int column = 0) const 这个可以找到QModelindex
bool isDir(const QModelIndex &index) const 判断是不是目录
bool isReadOnly() const 是否只读
QDateTime lastModified(const QModelIndex &index) const 修改时间
QModelIndex mkdir(const QModelIndex &parent, const QString &name) 新建文件夹
QVariant myComputer(int role = Qt::DisplayRole) const
bool nameFilterDisables() const
QStringList nameFilters() const
QFile::Permissions permissions(const QModelIndex &index) const 权限
bool remove(const QModelIndex &index) 移除
bool resolveSymlinks() const
bool rmdir(const QModelIndex &index) 删除目录
QDir rootDirectory() const 返回根目录
QString rootPath() const 根路径
void setFilter(QDir::Filters filters) 过滤器
void setIconProvider(QFileIconProvider *provider)
void setNameFilterDisables(bool enable)
void setNameFilters(const QStringList &filters)
void setReadOnly(bool enable) 设置为只读
void setResolveSymlinks(bool enable)
QModelIndex setRootPath(const QString &newPath) 设置根路径
qint64 size(const QModelIndex &index) const 大小
QString type(const QModelIndex &index) const 类型

signals:
void directoryLoaded(const QString &path)
void fileRenamed(const QString &path, const QString &oldName, const QString &newName)
void rootPathChanged(const QString &newPath)

例子:
在这里插入图片描述

#ifndef MyFileSystem_H
#define MyFileSystem_H
#include<QWidget>
#include<QLabel>
#include<QLineEdit>
#include<QPushButton>
#include<QTreeView>
#include<QFileSystemModel>
class MyFileSystem :public QWidget
{
    Q_OBJECT
public:
    MyFileSystem(QWidget *parent = 0);
private:
    QLabel *label;
    QPushButton *forward_bt,*back_bt,*sure_bt;
    QLineEdit *location;
    QFileSystemModel *file_model;
    QTreeView *file_view;
    int now_index=0;
    QList<QString> dir_list;
};

#endif // MyFileSystem_H


#include "myfilesystem.h"
#include<QDir>
#include<QList>
#include<QString>
#include<QDebug>
#include<QHBoxLayout>
#include<QVBoxLayout>
MyFileSystem::MyFileSystem(QWidget *parent)
    :QWidget(parent)
{
    QVBoxLayout *main_desktop=new QVBoxLayout(this);
    QHBoxLayout *top_title=new QHBoxLayout;
    forward_bt=new QPushButton("前进");
    back_bt=new QPushButton("后退");
    sure_bt=new QPushButton("确定");
    location=new QLineEdit;
    location->setPlaceholderText("输入你想去的地址");
    file_model=new QFileSystemModel;
    file_model->setRootPath(QDir::currentPath());
    qDebug()<<file_model->rootPath();
    file_view=new QTreeView(this);
    file_view->setModel(file_model);
    file_view->setRootIndex(file_model->index("/home/zz"));//显示指定的目录
    top_title->addWidget(forward_bt);
    top_title->addWidget(back_bt);
    top_title->addWidget(location);
    top_title->addWidget(sure_bt);
    main_desktop->addLayout(top_title);
    main_desktop->addWidget(file_view);
    this->resize(500,500);
    this->show();
    //实现前进,后退,确定的功能
    dir_list.append("/home/zz");
    location->setText(dir_list.at(now_index));
    connect(back_bt,QOverload<bool>::of(&QPushButton::clicked),[this]()mutable{
        if(this->now_index>0)--this->now_index;
        this->file_view->setRootIndex(this->file_model->index(this->dir_list.at(this->now_index)));
        this->location->setText(this->dir_list.at(this->now_index));
        qDebug()<<this->dir_list.length()<<this->now_index<<this->dir_list.at(this->now_index);

    });
    connect(forward_bt,QOverload<bool>::of(&QPushButton::clicked),[this]()mutable{
        if(this->now_index<this->dir_list.length()-1)++this->now_index;
        this->file_view->setRootIndex(this->file_model->index(this->dir_list.at(this->now_index)));
        this->location->setText(this->dir_list.at(this->now_index));
        qDebug()<<this->dir_list.length()<<this->now_index<<this->dir_list.at(this->now_index);

    });
    connect(sure_bt,QOverload<bool>::of(&QPushButton::clicked),[this]()mutable{
        QString position=this->location->text();
        this->file_view->setRootIndex(this->file_model->index(position));
        ++this->now_index;
        this->dir_list.insert(this->now_index,position);
        qDebug()<<this->dir_list.length()<<this->now_index<<this->dir_list.at(this->now_index);

    });
}



QFileDialog

提供了一个窗口,可以选择文件或者目录

Public Types:

enum	AcceptMode { AcceptOpen, AcceptSave }
enum	DialogLabel { LookIn, FileName, FileType, Accept, Reject }
enum	FileMode { AnyFile, ExistingFile, Directory, ExistingFiles, DirectoryOnly }
enum	Option { ShowDirsOnly, DontResolveSymlinks, DontConfirmOverwrite, DontUseNativeDialog, ..., DontUseCustomDirectoryIcons }
flags	Options
enum	ViewMode { Detail, List }
函数 作用
AcceptMode acceptMode() const 接受的方式,打开或者保存
QString defaultSuffix() const 默认的后缀
QDir directory() const 目录
QUrl directoryUrl() const 目录的url
FileMode fileMode() const 文件的可接受方式
QDir::Filters filter() const 过滤器
QStringList history() const 历史
QFileIconProvider * iconProvider() const
QString labelText(DialogLabel label) const
QStringList mimeTypeFilters() const
QStringList nameFilters() const 过滤器
void open(QObject *receiver, const char *member)
Options options() const
QAbstractProxyModel * proxyModel() const
bool restoreState(const QByteArray &state)
QByteArray saveState() const 保存状态
void selectFile(const QString &filename) 选择文件
void selectMimeTypeFilter(const QString &filter)
void selectNameFilter(const QString &filter) 名字过滤
void selectUrl(const QUrl &url) 经过url进行选择
QStringList selectedFiles() const 选择的文件名称
QString selectedMimeTypeFilter() const 选择的文件类型
QList selectedUrls() const
void setAcceptMode(AcceptMode mode) 设置dialog的打开作用
void setDefaultSuffix(const QString &suffix) 设置默认的后缀
void setDirectory(const QString &directory) 设置打开的目录
void setDirectory(const QDir &directory) 设置打开的目录
void setDirectoryUrl(const QUrl &directory) 设置打开的目录
void setFileMode(FileMode mode) 文件的mode
void setFilter(QDir::Filters filters) 过滤器
void setHistory(const QStringList &paths) 历史
void setIconProvider(QFileIconProvider *provider)
void setItemDelegate(QAbstractItemDelegate *delegate)
void setLabelText(DialogLabel label, const QString &text) 设置label的text
void setMimeTypeFilters(const QStringList &filters) 过滤器
void setNameFilter(const QString &filter) 过滤器
void setNameFilters(const QStringList &filters) 过滤器
void setOption(Option option, bool on = true)
void setOptions(Options options)
void setProxyModel(QAbstractProxyModel *proxyModel)
void setSidebarUrls(const QList &urls)
void setSupportedSchemes(const QStringList &schemes)
void setViewMode(ViewMode mode)
QList sidebarUrls() const
QStringList supportedSchemes() const
bool testOption(Option option) const
ViewMode viewMode() const
QString getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), Options options = ShowDirsOnly)
QUrl getExistingDirectoryUrl(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QUrl &dir = QUrl(), Options options = ShowDirsOnly, const QStringList &supportedSchemes = QStringList())
QString getOpenFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options()) 得到文件名字
QStringList getOpenFileNames(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options()) 得到文件名字
QUrl getOpenFileUrl(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options(), const QStringList &supportedSchemes = QStringList()) 得到文件的url
QList getOpenFileUrls(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options(), const QStringList &supportedSchemes = QStringList()) 得到文件的url
QString getSaveFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options()) 保存文件的名字
QUrl getSaveFileUrl(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options(), const QStringList &supportedSchemes = QStringList()) 保存文件的url

在这里插入图片描述

 QString filename=QFileDialog::
            getOpenFileName(this,"dialog的标题", "/home/zz",
                            "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)");
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::AnyFile);//可以选择任何文件
dialog.setNameFilter("Images (*.png *.xpm *.jpg)");//图片文件
dialog.setViewMode(QFileDialog::Detail);
if(dialog.exec())qDebug()<<dialog.selectedFiles();

QStringListModel

在这里插入图片描述
例子:


    QStringListModel *model=new QStringListModel;
    QStringList list;
    list<<"A"<<"B"<<"C";
    model->setStringList(list);
    QListView *listview=new QListView;
    listview->setModel(model);
    listview->resize(500,500);
    listview->show();

QSqlTableModel

其实这东西很少用,直接操作数据库就好,想显示的再去有tableview显示
属性字段:

函数 作用
QSqlIndex primaryKey() const 主键
QSqlRecord record() const 记录集
QSqlRecord record(int row) const 第几行的记录集
virtual void revertRow(int row)
virtual void setEditStrategy(EditStrategy strategy)
virtual void setFilter(const QString &filter)
bool setRecord(int row, const QSqlRecord &values)
virtual void setSort(int column, Qt::SortOrder order)
virtual void setTable(const QString &tableName)

在这里插入图片描述
例子:

/*
 * model->revertAll();//如果不删除,则撤销
 * model.submitAll();
 * model->removeRow(curRow);
 * QSqlRecord record = tablemodel.record(num);
 * record.setValue("name",record.value("name").toString()+"2");
 * model.insertRecord(1,record);
*/
MyFileSystem::MyFileSystem(QWidget *parent)
    :QWidget(parent)
{
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("192.168.88.131");
    db.setDatabaseName("mydata");
    db.setUserName("zz");
    db.setPassword("123");

    //2.打开数据库
    if(db.open())
    {
        qDebug()<<"DataBase opened!";
    }
    else
    {
        qDebug()<< "Error: Failed to connect database." << db.lastError();
    }
    QSqlTableModel *model=new QSqlTableModel(nullptr,db);
    model->setTable("students");
    model->select();
    QTableView *view=new QTableView;
    view->resize(500,500);
    view->setModel(model);
    view->hideColumn(0);
    view->setColumnWidth(1,200);
    view->verticalHeader()->setVisible(false);
    view->show();
}

QSqlQueryModel

属性字段:

函数 作用

在这里插入图片描述
例子:

 	QSqlQueryModel *model=new QSqlQueryModel();
    model->setQuery("select * from students");
    QTableView *view=new QTableView;
    view->resize(500,500);
    view->setModel(model);
    view->hideColumn(0);
    view->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    view->setColumnWidth(1,200);
    view->verticalHeader()->setVisible(false);
    view->show();

QStandardItemModel

属性字段:

函数 作用
void appendRow(QStandardItem *item) 增加行
void clear() 清除
QStandardItem * horizontalHeaderItem(int column) const 找到标题
QList<QStandardItem *> findItems(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0) const 找相关字段
void insertColumn(int column, const QList<QStandardItem *> &items) 插入列
void insertRow(int row, const QList<QStandardItem *> &items) 插入行
void setHorizontalHeaderItem(int column, QStandardItem *item) 设置标题
void setHorizontalHeaderLabels(const QStringList &labels)
void setItem(int row, int column, QStandardItem *item) 设置某一个内容
void setVerticalHeaderItem(int row, QStandardItem *item) 垂直的标题
void setVerticalHeaderLabels(const QStringList &labels)
QList<QStandardItem *> takeColumn(int column) 得到列
QList<QStandardItem *> takeRow(int row) 得到行
QStandardItem * takeItem(int row, int column = 0) 得到具体的内容

signals:
void itemChanged(QStandardItem *item)

在这里插入图片描述
例子:

QStandardItemModel *model=new QStandardItemModel(9,9);
    for(int i=1;i<10;i++)
        for(int j=1;j<=i;j++)
        {

            QStandardItem *item=new QStandardItem(QString("%0 x %1 =%2").arg(j).arg(i).arg(i*j));
            model->setItem(i-1,j-1,item);
        }

    QTableView *view=new QTableView;
    view->setWindowTitle("专用乘法口诀表");
    view->resize(600,500);
    view->setModel(model);
    view->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    view->setColumnWidth(1,200);
    view->setEditTriggers(QAbstractItemView::NoEditTriggers);//不允许编辑
    view->horizontalHeader()->setVisible(false);
    view->verticalHeader()->setVisible(false);
    view->setShowGrid(false);
    view->show();

QTableView

属性字段:

函数 作用
int columnWidth(int column) const 返回宽度
int rowHeight(int row) const 返回高度
QHeaderView * horizontalHeader() const
bool isColumnHidden(int column) const 隐藏
bool isRowHidden(int row) const
int rowAt(int y) const 返回行
void setColumnHidden(int column, bool hide) 隐藏
void setRowHidden(int row, bool hide)
void setRowHeight(int row, int height) 设置高度
void setColumnWidth(int column, int width) 设置宽度
void setVerticalHeader(QHeaderView *header) 标题
void setHorizontalHeader(QHeaderView *header)
void setShowGrid 隐藏线条
void selectColumn(int column)
void selectRow(int row)
void setShowGrid(bool show)
void showColumn(int column)
void showRow(int row)

QTreeView

属性字段:

函数 作用
QHeaderView * header() const 返回header
QModelIndex indexAbove(const QModelIndex &index) const 返回上个目录
QModelIndex indexBelow(const QModelIndex &index) const 返回下个
void setColumnHidden(int column, bool hide) 隐藏列
void setColumnWidth(int column, int width) 设置列宽
void setExpanded(const QModelIndex &index, bool expanded) 展开
void setExpandsOnDoubleClick(bool enable) 双击
void setFirstColumnSpanned(int row, const QModelIndex &parent, bool span)
void setHeader(QHeaderView *header) 设置表头
void setHeaderHidden(bool hide) 隐藏表头
void setIndentation(int i)
void setItemsExpandable(bool enable) 展开
void setRootIsDecorated(bool show)
void setRowHidden(int row, const QModelIndex &parent, bool hide) 隐藏行
void setSortingEnabled(bool enable)
void setTreePosition(int index)
void setUniformRowHeights(bool uniform)
void setWordWrap(bool on)

slots:

void collapse(const QModelIndex &index)
void collapseAll()
void expand(const QModelIndex &index)
void expandAll()
void expandToDepth(int depth)
void hideColumn(int column)
void resizeColumnToContents(int column)
void showColumn(int column)

signals:

void collapsed(const QModelIndex &index)
void expanded(const QModelIndex &index)

例子:

QListView

属性字段:

enum Flow { LeftToRight, TopToBottom }//方向
enum LayoutMode { SinglePass, Batched }
enum Movement { Static, Free, Snap }//是否可移动
enum ResizeMode { Fixed, Adjust }
enum ViewMode { ListMode, IconMode }

函数 作用
void setBatchSize(int batchSize)
void setFlow(Flow flow) 方向
void setGridSize(const QSize &size)
void setLayoutMode(LayoutMode mode)
void setModelColumn(int column)
void setMovement(Movement movement)
void setResizeMode(ResizeMode mode)
void setRowHidden(int row, bool hide) 隐藏
void setSelectionRectVisible(bool show) 选择
void setSpacing(int space)
void setUniformItemSizes(bool enable)
void setViewMode(ViewMode mode) 显示方式
void setWordWrap(bool on)
void setWrapping(bool enable)

例子:


QTableWidget

属性字段:

函数 作用
int columnCount() const 列数
int rowCount() const 行数
int column(const QTableWidgetItem *item) const 指定的item的列数
int row(const QTableWidgetItem *item) const 指定的item的行数
int currentColumn() const 现在选中的item
int currentRow() const
QTableWidgetItem * currentItem() const
QList<QTableWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags) const 查item
QTableWidgetItem * itemAt(int ax, int ay) const
QList<QTableWidgetItem *> selectedItems() const
void removeCellWidget(int row, int column) 移除
void setCellWidget(int row, int column, QWidget *widget) 添加窗口部件
void setColumnCount(int columns) 列数
void setCurrentCell(int row, int column) 设置现在的ietm
void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command)
void setCurrentItem(QTableWidgetItem *item)
void setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command)
void setHorizontalHeaderItem(int column, QTableWidgetItem *item) 设置水平标题
void setHorizontalHeaderLabels(const QStringList &labels)
void setItem(int row, int column, QTableWidgetItem *item) 设置item
void setItemPrototype(const QTableWidgetItem *item)
void setRangeSelected(const QTableWidgetSelectionRange &range, bool select) 可选范围
void setRowCount(int rows) 设置行数
void setVerticalHeaderItem(int row, QTableWidgetItem *item) 设置垂直标题
void setVerticalHeaderLabels(const QStringList &labels)
QTableWidgetItem * takeHorizontalHeaderItem(int column) 得到标题
QTableWidgetItem * takeItem(int row, int column) 得到item
QTableWidgetItem * takeVerticalHeaderItem(int row) 得到标题
QTableWidgetItem * verticalHeaderItem(int row) const
int visualColumn(int logicalColumn) const 可见的列
QRect visualItemRect(const QTableWidgetItem *item) const
int visualRow(int logicalRow) const 可见的行

slots:

void clear()
void clearContents()
void insertColumn(int column)
void insertRow(int row)
void removeColumn(int column)
void removeRow(int row)
void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)

signals:

void cellActivated(int row, int column)
void cellChanged(int row, int column)
void cellClicked(int row, int column)
void cellDoubleClicked(int row, int column)
void cellEntered(int row, int column)
void cellPressed(int row, int column)
void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
void itemActivated(QTableWidgetItem *item)
void itemChanged(QTableWidgetItem *item)
void itemClicked(QTableWidgetItem *item)
void itemDoubleClicked(QTableWidgetItem *item)
void itemEntered(QTableWidgetItem *item)
void itemPressed(QTableWidgetItem *item)
void itemSelectionChanged()

在这里插入图片描述
例子:


    QTableWidget *mywidget=new QTableWidget(10,3);
//    mywidget->setColumnCount(3);列数
//    mywidget->setRowCount(10);行数
    QStringList headerlist;
    headerlist<<"学号"<<"姓名"<<"照片";
    for(int i=1;i<4;i++)
    {
        mywidget->setItem(i-1,0,new QTableWidgetItem(QString("150033013%0").arg(i)));
        mywidget->setItem(i-1,1,new QTableWidgetItem(QString("zxw%0").arg(i)));
        mywidget->setItem(i-1,2,new QTableWidgetItem(QIcon(QString(":/Image/my%0.png").arg(i)),""));
    }
    mywidget->setHorizontalHeaderLabels(headerlist);
    mywidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//自动适应
    mywidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//禁止编辑
    /*
     *QAbstractItemView::NoEditTriggers  0  不能对表格内容进行修改
     *QAbstractItemView::CurrentChanged  1  任何时候都能对单元格修改
     *QAbstractItemView::DoubleClicked  2  双击单元格
     *QAbstractItemView::SelectedClicked  4  单击已选中的内容
     *QAbstractItemView::EditKeyPressed  8  Editing starts when the platform edit key has been pressed over an item.
     *QAbstractItemView::AnyKeyPressed  16  按下任意键就能修改
     *QAbstractItemView::AllEditTriggers  31 以上条件全包括
    */
    mywidget->setSelectionBehavior(QAbstractItemView::SelectRows); //整行选中的方式
    /*
     * QAbstractItemView::SelectItems  0  Selecting single items.选中单个单元格
     * QAbstractItemView::SelectRows  1  Selecting only rows.选中一行
     * QAbstractItemView::SelectColumns  2  Selecting only columns.选中一列
    */
    mywidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //设置为可以选中多个目标
    /*
     *QAbstractItemView::NoSelection 不能选择
     *QAbstractItemView::SingleSelection 选中单个目标
     *QAbstractItemView::MultiSelection 选中多个目标
     *QAbstractItemView::ExtendedSelection QAbstractItemView::ContiguousSelection 的区别不明显,主要功能是正常情况下是单选,但按下Ctrl或Shift键后,可以多选
    */
    QTableWidgetItem *columnHeaderItem0 = mywidget->horizontalHeaderItem(0); //获得水平方向表头的Item对象
    columnHeaderItem0->setFont(QFont("Helvetica")); //设置字体
    columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //设置单元格背景颜色
    columnHeaderItem0->setTextColor(Qt::red); //设置文字颜色
    columnHeaderItem0->setTextAlignment(Qt::LeftToRight);//文字对齐方式
    QLabel *label=new QLabel;
    label->setPixmap(QPixmap(":/Image/my2.png"));
    mywidget->setCellWidget(2,2,label);//添加控件
//    myidget->setColumnWidth(3,200);
//    myidget->setRowHeight(3,60);
    mywidget->resizeColumnsToContents();//内容和大小匹配
    mywidget->resizeRowsToContents();
    mywidget->verticalHeader()->setVisible(false);
    mywidget->resize(500,500);
    mywidget->show();

QTreeWidget

属性字段:

函数 作用
void addTopLevelItem(QTreeWidgetItem *item) 顶层
void addTopLevelItems(const QList<QTreeWidgetItem *> &items)
int columnCount() const 列数
int currentColumn() const 行数
QTreeWidgetItem * currentItem() const现在的item
QList<QTreeWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags, int column = 0) const 查找item
QTreeWidgetItem * headerItem() const header
void insertTopLevelItem(int index, QTreeWidgetItem *item) 最上面
void insertTopLevelItems(int index, const QList<QTreeWidgetItem *> &items)
QTreeWidgetItem * invisibleRootItem() const 根可见
QTreeWidgetItem * itemAbove(const QTreeWidgetItem *item) const 上层
QTreeWidgetItem * itemAt(const QPoint &p) const
QTreeWidgetItem * itemAt(int x, int y) const 返回item
QTreeWidgetItem * itemBelow(const QTreeWidgetItem *item) const 下层
QWidget * itemWidget(QTreeWidgetItem *item, int column) const itemwidget
void removeItemWidget(QTreeWidgetItem *item, int column) remove
QList<QTreeWidgetItem *> selectedItems() const 选择的item
void setColumnCount(int columns) 设置列数
void setCurrentItem(QTreeWidgetItem *item) 现在的item
void setCurrentItem(QTreeWidgetItem *item, int column)
void setCurrentItem(QTreeWidgetItem *item, int column, QItemSelectionModel::SelectionFlags command)
void setFirstItemColumnSpanned(const QTreeWidgetItem *item, bool span)
void setHeaderItem(QTreeWidgetItem *item) 标题
void setHeaderLabel(const QString &label) 标题
void setHeaderLabels(const QStringList &labels) 标题
void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget)
int sortColumn() const
void sortItems(int column, Qt::SortOrder order)
QTreeWidgetItem * takeTopLevelItem(int index) 得到item
QTreeWidgetItem * topLevelItem(int index) const
int topLevelItemCount() const
QRect visualItemRect(const QTreeWidgetItem *item) const

在这里插入图片描述
例子:

  QTreeWidget *view=new QTreeWidget;
   view->setColumnCount(1);
   //第一组
   QTreeWidgetItem *group1=new QTreeWidgetItem(view);
   group1->setText(0,"group1");
   group1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   group1->setCheckState(0,Qt::Unchecked);
   QTreeWidgetItem *item11=new QTreeWidgetItem(group1);
   item11->setText(0,"item11");
   item11->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   item11->setCheckState(0,Qt::Unchecked);
   QTreeWidgetItem *item12=new QTreeWidgetItem(group1);
   item12->setText(0,"item12");
   item12->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   item12->setCheckState(0,Qt::Unchecked);
   QTreeWidgetItem *item13=new QTreeWidgetItem(group1);
   item13->setText(0,"item13");
   item13->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   item13->setCheckState(0,Qt::Unchecked);
   QTreeWidgetItem *item14=new QTreeWidgetItem(group1);
   item14->setText(0,"item4");
   view->insertTopLevelItem(0,new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item1"))));
   view->insertTopLevelItem(0,new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item2"))));
   view->insertTopLevelItem(0,new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item3"))));
   view->expandAll();//全部展开
   view->collapseAll();//全部收敛
   view->expand(view->indexAt(QPoint(0,0)));//展开
   view->resize(500,500);
   view->show();

QListWidget

属性字段:

函数 作用
void addItem(const QString &label) 增加item
void addItem(QListWidgetItem *item)
void addItems(const QStringList &labels)
void closePersistentEditor(QListWidgetItem *item)
int count() const
QListWidgetItem * currentItem() const 现在选中的iyems
int currentRow() const 现在的行数
QList<QListWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags) const
void insertItem(int row, QListWidgetItem *item) 插入
void insertItem(int row, const QString &label)
void insertItems(int row, const QStringList &labels)
bool isSortingEnabled() const
QListWidgetItem * item(int row) const
QListWidgetItem * itemAt(const QPoint &p) const 获取item
QListWidgetItem * itemAt(int x, int y) const
QWidget * itemWidget(QListWidgetItem *item) const 获得widget
void removeItemWidget(QListWidgetItem *item) 移除widget
int row(const QListWidgetItem *item) const 获取行数
QList<QListWidgetItem *> selectedItems() const 选择的item
void setCurrentItem(QListWidgetItem *item) 现在选择的item
void setCurrentItem(QListWidgetItem *item, QItemSelectionModel::SelectionFlags command)
void setCurrentRow(int row) 设置现在的item
void setCurrentRow(int row, QItemSelectionModel::SelectionFlags command)
void setItemWidget(QListWidgetItem *item, QWidget *widget) 设置widget
void setSortingEnabled(bool enable)
void sortItems(Qt::SortOrder order = Qt::AscendingOrder)
QListWidgetItem * takeItem(int row) 得到widget
QRect visualItemRect(const QListWidgetItem *item) const

slots:

void clear()
void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)

signals:

void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
void currentRowChanged(int currentRow)
void currentTextChanged(const QString &currentText)
void itemActivated(QListWidgetItem *item)
void itemChanged(QListWidgetItem *item)
void itemClicked(QListWidgetItem *item)
void itemDoubleClicked(QListWidgetItem *item)
void itemEntered(QListWidgetItem *item)
void itemPressed(QListWidgetItem *item)
void itemSelectionChanged()

在这里插入图片描述

例子:

    QListWidget *view=new QListWidget;
    view->addItem(new QListWidgetItem("first"));
    view->addItem(new QListWidgetItem("second"));
    view->addItem(new QListWidgetItem("third"));
    QLabel *label=new QLabel;
    QPixmap map(":/Image/my2.png");
    label->setPixmap(map);
    QListWidgetItem *item=new QListWidgetItem("forth");
    view->addItem(item);
    view->setItemWidget(item,label);
    connect(view,QOverload<QListWidgetItem *>::of(&QListWidget::itemClicked),[view,map](QListWidgetItem *item){
        qDebug()<<view->row(item);
        if(view->row(item)==3)
        {

            QWidget *subwiget=new QWidget;
            QLabel *label=new QLabel;
            label->setPixmap(QPixmap(":/Image/my2.png"));
            QHBoxLayout *layout=new QHBoxLayout(subwiget);
            layout->addWidget(label);
            subwiget->resize(map.width(),map.height());
            subwiget->show();

        }
    });
    view->resize(500,500);
    view->show();

猜你喜欢

转载自blog.csdn.net/qq_33564134/article/details/84590107