Qt QListWidget常用方法

类 QListWidget 在其内部定义了一个具有列表结构的模型,并以列表形式显示其中的数据项。列表中的每个数据项被表示为类 QListWidgetItem 的一个对象。在列表视图中所要显示的数据被存放在每个数据项的角色 DisplayRole 对应的数据子项中。这个数据子项的类型为 QVariant ,其中可以存放类型为 QString 的字符串,也可以存放类型为 int 或者 double 的数值。我们可以调用 QListWidget 的成员函数 addItem()

向列表添加一个数据项.

在 ListWidget 控件的 properties 选项中,一般常对以下选项进行设置。

               name :            该控件对应源代码中的名称;

               font :            设置表格内部的字体;

               count :           保存项目的数目;

               currentRow :      保存当前项目的行;

               sortingEnabled :  是否对item排序。

以下是一些常用的成员函数:

1) QListWidget::QListWidget ( QWidget *parent = 0 )       // 构造一个父对象为parent的ListWidget。

2) void QListWidget::addItem ( const QString & label )     // 添加一个新的项目,在新添加的项目中添加label标签。

3) void QListWidget::addItem ( QListWidgetItem *item )   // 添加项目item。

4) void QListWidget::addItems ( const QStringList & labels )   // 添加一列项目。

5) void QListWidget::clear () [slot]   // 清除该ListWidget中的所有项目。

6) QListWidgetItem *QListWidget::currentItem () const    //返回当前活动项目。

7) void QListWidget::editItem ( QListWidgetItem *item )    //如果项目item是可编辑的,开始编辑项目item。

8) QList<QListWidgetItem *> QListWidget::findItems( constQString & text, QT::MatchFlags flags ) const  //查找匹配字符串text的项目,并返回查找结果。

9) void QListWidget::insertItem ( int row, QListWidgetItem *item )    //在行row处插入项目item。

10) void QListWidget::insertItem ( int row, const QString &label )        //这是一个重载函数,函数功能同9),在行row处插入标签为label的新项目。

11) voidQListWidget::insertItems ( int row, const QStringList & labels )    //在行row处插入一列项目。

12) QListWidgetItem *QListWidget::item ( int row ) const    //返回行row处的项目,如果行row处没有项目则返回0。

13) QListWidgetItem*QListWidget::itemAt ( const QPoint & p ) const    //返回点p处的项目。

14) QListWidgetItem *QListWidget::itemAt ( int x, int y ) const    //返回坐标(x,y)处的项目。

15) QWidget *QListWidget::itemWidget ( QListWidgetItem *item ) const    //返回项目item处显示的控件。

16) QListWidgetItem *QListWidget::takeItem ( int row )   // 移除行row处的项目,并返回项目控件。

17) void QListWidget::removeItemWidget ( QListWidgetItem *item )    //删除项目item处的控件。

18) int QListWidget::row ( const QListWidgetItem *item ) const    //返回项目item所在的行。

19) QList<QListWidgetItem *> QListWidget::selectedItems ()const    //返回所有被选中的项目的控件。

20) void QListWidget::setCurrentItem ( QListWidgetItem *item )    //设置项目item为当前项目。

21) void QListWidget::setItemWidget ( QListWidgetItem *item, QWidget*widget )    //设置控件widget为项目item的显示控件。

22) void QListWidget::setItemWidget ( QListWidgetItem *item, QWidget*widget )    //这是个重载函数,函数功能同23)。

23) voidQListWidget::sortItems ( QT::SortOrder order = QT::AscendingOrder )    //把项目按照order进行排序。

下面给出一个例子,效果如下图:

代码如下:

//flowchartsymbolpicker.h
#ifndef FLOWCHARTSYMBOLPICKER_H
#define FLOWCHARTSYMBOLPICKER_H

#include <QDialog>
#include <QMap>
#include <QIcon>

class QDialogButtonBox;
class QListWidget;

class FlowChartSymbolPicker : public QDialog
{
    Q_OBJECT

public:
    FlowChartSymbolPicker(const QMap<int, QString> &symbolMap,
                          QWidget *parent = 0);

    int selectedId() const { return id; }
    void done(int result);
    ~FlowChartSymbolPicker();

private slots:
    void message();

private:
    QIcon iconForSymbol(const QString &symbolName);

    QListWidget *listWidget;
    QDialogButtonBox *buttonBox;
    int id;
};

#endif // FLOWCHARTSYMBOLPICKER_H

//flowchartsymbolpicker.cpp
#include <QListWidget>
#include <QListWidgetItem>
#include <QDialogButtonBox>
#include <QVBoxLayout>
#include <QMessageBox>

#include "flowchartsymbolpicker.h"

FlowChartSymbolPicker::FlowChartSymbolPicker(const QMap<int, QString> &symbolMap,
                                             QWidget *parent)
    : QDialog(parent)
{
    id = -1;

    listWidget = new QListWidget;
    listWidget->setIconSize(QSize(60,60));
    listWidget->setEditTriggers(QAbstractItemView::AnyKeyPressed);

    QMapIterator<int, QString> i(symbolMap);
    while (i.hasNext()) {
        i.next();
        QListWidgetItem *item = new QListWidgetItem(i.value(), listWidget);
        item->setIcon(iconForSymbol(i.value()));
        item->setData(Qt::UserRole, i.key());
    }

    buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok |
                                     QDialogButtonBox::Cancel);
    connect(buttonBox, SIGNAL(accepted()), this, SLOT(message()));
    connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(listWidget);
    layout->addWidget(buttonBox);
    setLayout(layout);

    setWindowTitle(tr("Flowchart Symbol Picker"));
}

void FlowChartSymbolPicker::message()
{
    QMessageBox::about(this, tr("AHA"),tr("Thanks"));
}

void FlowChartSymbolPicker::done(int result)
{
    id = -1;
    if (result == QDialog::Accepted) {
        QListWidgetItem *item = listWidget->currentItem();
        if (item)
            id = item->data(Qt::UserRole).toInt();
    }
    QDialog::done(result);
}

QIcon FlowChartSymbolPicker::iconForSymbol(const QString &symbolName)
{
    QString fileName = ":/images/" + symbolName.toLower();
    fileName.replace(‘ ‘, ‘_‘);
    return QIcon(fileName);
}

FlowChartSymbolPicker::~FlowChartSymbolPicker()
{
}

//main.cpp
#include "flowchartsymbolpicker.h"
#include <QApplication>

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

    QMap<int, QString> map;
    map.insert(77, QObject::tr("7"));
    map.insert(78, QObject::tr("11"));
    map.insert(79, QObject::tr("12"));
    map.insert(80, QObject::tr("13"));
    map.insert(81, QObject::tr("14"));
    map.insert(82, QObject::tr("15"));
    map.insert(83, QObject::tr("16"));
    map.insert(84, QObject::tr("ali5"));
    map.insert(85, QObject::tr("l5"));
    map.insert(86, QObject::tr("oh5"));

    FlowChartSymbolPicker window(map);
    window.resize(300, 300);
    window.show();

    return a.exec();
}

构造函数接收一个 QMap 关联容器对象,这个容器存储了每个项的 ID 和名字,在构造函数中我们遍历这个容器的每个元素,并用该元素的键和值设置QListWidgetItem 对象的名字和 ID 。 QListWidget 有几个角色 (role) ,每个角色都有一个关联的 QVariant ,最常用的角色有: Qt::DisplayRole, Qt::EditRole, Qt::IconRole, Qt::UserRole, 并且这些角色都有方便的设置和获取函数 [setText(), setIcon()] 等。通过指定一个大于等于 Qt::UsetRole 的值就可以定义自定义的角色。在本例中,使用 Qt::UserRole 存储每一个项的 ID 。

Done() 函数式由 QDialog 重新实现的。当用户单击 OK 或者 Cancel 按钮时,就会调用它。如果用户单击 OK ,就获得相应的项,并且使用 data() 函数提取 ID 。如果对项的文本感兴趣,则可以通过调用 item->data(Qt::DiaplayRole).toString() 或者更为方便的 item->text() 来获取文本。

默认情况下,QListWidget是只读的。如果想让用户编辑这些项,则可以使用QAbstractItemView:: setEditTriggers()设置这个视图的编辑触发器。例如:QAbstractItemView::AnyKeyPressed这个设置值的意思是:用户只要一开始输入就进入项的编辑状态。类似的,也可以提供一个Edit(编辑)按钮(还可以提供Add按钮和Delete 按钮),同时使用信号槽连接,这样就可以使用程序来控制编辑操作了。 
        我们还可以设置viewModel这个参数,来确定使用不同的视图进行显示。比如,我们使用下面的语句:    
        listWidget->setViewMode(QListView::IconMode); 
         程序的效果如图:

转自: http://blog.csdn.net/bcs_01/article/details/8943987

时间: 2024-11-05 14:57:15

Qt QListWidget常用方法的相关文章

Qt学习之QListWidget删除Item

将QListWidgetItem从QListWidget列表中删除有两种方法可以做到,但也要根据自己的需要进行选择. 第一种是 QListWidgetItem *takeItem(int row); 使用此方法需要知道删除的是第几个Item,并且返回删除的Item指针. 第二种是 inline void removeItemWidget(QListWidgetItem *item); 需要知道删除的Item的对象. 代码测试:先添加5个Item,然后删除第三个(索引为2,从0开始),再使用第二种

qt model/view 架构基础介绍之QListWidget

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt import * from PyQt4 import QtGui, QtCore from PyQt4.QtCore import * import sys # MVC是Model-View-Controller的简写,即模型-视图-控制器 #model/view框架将传统的mv模型分

Qt中的QString和QStringList常用方法

QString QString s1 = "abc"; QString s2("hello"); //字符串连接 QString s = s1 + s2; //组包 s = QString("a = %1, b = %2, c = %3").arg(250).arg("hello").arg(22.22); qDebug()<<s; //输出结果:a = 250, b = hello, c = 22.22 s =

列表框QListWidget类

QListWidget类也是GUI中常用的类,它从QListView下派生: class Q_GUI_EXPORT QListWidget : public QListView { Q_OBJECT 常用方法和属性: (1)addItem void addItem ( const QString & label )void addItem ( QListWidgetItem * item )void addItems ( const QStringList & labels ) 添加一项或

Qt之QAbstractItemView视图项拖拽(二)

一.需求说明 上一篇文章Qt之QAbstractItemView视图项拖拽(一)讲述了实现QAbstractItemView视图项拖拽的一种方式,是基于QDrag实现的,这个类是qt自己封装好了的,所以可定制性也就没有了那么强,最明显的是,这个类在执行exec方法后,mouse系列的回调接口就被阻塞了,随之而来的问题就是拖拽时item项没有了hover特性,为了解决这个问题,我们就不能使用QDrag类来实现拖拽了,这也是这篇文章我要讲述的内容. 二.效果展示 如图1是demo的效果展示,比较丑,

将vim作为QT开发的IDE

转载请注明链接与作者huihui1988 用了一段时间的vim,喜欢上了这种简洁高效的编辑器.恰逢正在学习QT中,于是将vim变成了开发QT的工具.以下是具体配置. 一.语法高亮支持: 1.打开VIMDIR/vim72/syntax/cpp.vim,加入 syn keyword cppStatement SLOT,SIGNAL syn keyword cppAccess slots,signals 2.增加QT的类型名: syn keyword cType ActiveQt Q3Accel Q3

Qt 实现 Logger 日志的显示

要求: 能够控制显示的总共行数.但不想要太重量级,简单显示就好. 参考StackOverflow 使用QPlainTextEdit If you want to limit the total number of paragraphs in a QPlainTextEdit, as it is for example useful in a log viewer, then you can use the maximumBlockCount property. The combination o

QT开发(九)——QT单元组件

QT开发(九)--QT单元组件 QT有三种单元组件,分别为列表单元组件QListWidget.树形单元组件QTreeWidget.表格单元组件QTableWidget. 一.QListWidget列表单元 1.QListWidget组件简介 QListWidget列表单元组件继承自QListView,是基于单元的列表组件.QListWidget可以显示一个清单,清单中的每个项目是QListWidgetItem的一个实例,每个项目可以通过QListWidgetItem来操作.可以通过QListWi

Qt之界面数据存储与获取(使用setUserData()和userData())

在GUI开发中,往往需要在界面中存储一些有用的数据,这些数据可以来配置文件.注册表.数据库.或者是server. 无论来自哪里,这些数据对于用户来说都是至关重要的,它们在交互过程中大部分都会被用到,例如:单击一个用户头像,显示该用户的详细信息(等级.昵称.姓名.个人说明). 简述 常见接口 数据源 setData和data 单独存储 整体存储 setItemData和itemData setUserData和userData 自定义数据 常见接口 Qt中,可以通过绝大部分已有的接口来存数数据.获