视图模型

这篇博客探讨了Qt框架中的视图模型,包括QFileSystemModel用于展示文件系统的目录和文件,QFileDialog用于选择文件或目录,QStringListModel在字符串列表场景的应用,QSqlTableModel和QSqlQueryModel在数据库操作中的角色,以及QStandardItemModel的使用。同时,还介绍了QTableView、QTreeView、QListView等视图组件,详细阐述了它们的属性、信号和槽函数,展示了如何在实际项目中应用这些视图模型和组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

视图模型

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() constheader
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) constitemwidget
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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值