Qt列表知多少?

原创 2018年04月17日 07:13:45
一、简介:
QListWidget是Qt提供的列表控件。它的父类是QListView,实际上QListWidget是一个自带model的view。通常情况下搭配QListWidgetItem(以下简称item)使用。


二:入门:

QListWidget的入门非常简单。只需要添加item就行了。

    QListWidget* list = new QListWidget(this);
    list->addItem("item 1");
    list->addItem("item 2");
    list->addItem("item 3");

blob.png


实际上仅用两行代码就入门了。QListWidget还有其他添加item的方法(add和Insert):


    //------void addItem(QListWidgetItem *item)
    QListWidgetItem* item = new QListWidgetItem("item 4");
    list->addItem(item);

    //------void addItems(const QStringList &labels)
    list->addItems(QStringList()<<"item 5"<<"item 6"<<"item 7");

    //------void insertItem(int row, QListWidgetItem *item)
    QListWidgetItem* item2 = new QListWidgetItem("item insert 1");
    list->insertItem(3,item2);

    //------void insertItem(int row, const QString &label)
    list->insertItem(3,"item insert 2");

    //------void insertItems(int row, const QStringList &labels)
    list->insertItems(3,QStringList()<<"item insert 3"<<"item insert 4");

blob.png

三、精进之路:

1.获取QListWidgetItem.

一开始的时候说了QListWidget要搭配QListWidgetItem来使用,所以在进一步玩QListWidget之前我们要学会获取item。获取item的方法有很多种:

    1.根据下标来获取: 
    //QListWidgetItem *item(int row) const  
    
    2.根据item的位置(坐标)来获取:
    //QListWidgetItem * itemAt(const QPoint &p) const 
    //QListWidgetItem * itemAt(int x, int y) const  
    
    3.根据下标来获取,并且从列表中移除:
    //QListWidgetItem *takeItem(int row) 
    
    4.获取当前的item:
    // QListWidgetItem *currentItem() const


2.美化列表.

在Qt中要说到美化,我第一时间想到的就是样式表了。不过这里不讨论样式表,看看它自己的函数怎么玩。

   

   2.1设置item的图标使用 void setIcon(const QIcon &icon)

  2.2设置item的文字颜色使用 void setForeground(const QBrush &brush)

  2.3设置item的背景颜色使用 void setBackground(const QBrush &brush)

   2.4设置item的文字字体使用 void setFont(const QFont &font)

   2.5设置item的大小使用void setSizeHint(const QSize &size)

   2.6设置itm的文本对齐方式使用void setTextAlignment(int alignment)

  

    for(int i = 0; i < 3; ++i)
    {
        list->item(i)->setIcon(QIcon("f:/05_test/icon.jpg")); //设置图标
        list->item(i)->setForeground(QBrush(QColor(Qt::white)));//设置前景色
        list->item(i)->setBackground(QColor(70,153,181)); //设置背景色
        list->item(i)->setFont(QFont("Microsoft YaHei",12,QFont::Bold));//设置字体
        list->item(i)->setSizeHint(QSize(20,50)); //设置大小
        list->item(i)->setTextAlignment(Qt::AlignCenter); //设置对齐方式(居中)
    }

      blob.png

3.编辑item。

使用openPersistentEditor开启编辑一个item,与之对应的函数是closePersistentEditor,测试代码:

   //添加一个按钮来触发编辑以及关闭编辑函数
   
   static bool flag = true;
    if(flag){
        list->openPersistentEditor(list->item(1));
        flag = false;
    }else{
        list->closePersistentEditor(list->item(1));
        flag = true;
    }

edititem.gif


4.拖拽item。

单纯的编辑还不能满足我们的需求,我们有时需要直接拖动Item来调整他们的顺序。拖拽并非QListWidget独有的功能,它的祖先就有了这个功能。

list->setDragDropMode(QListWidget::InternalMove);


dragitem.gif

值得注意的是拖拽不仅仅可以在内部进行,还可以在多个控件中进行。


5.横着排

以上看到的列表都是垂直方向排列的,列表也能横着排。void setFlow(Flow flow),把flow的值设置为LeftToRight。搭配

void  setWrapping(bool enable)使用可以让列表一直排成一行。

list->setFlow(QListWidget::LeftToRight);

blob.png


6.图标模式

在某些应用场景下列表只需要展示图片,那么这时候使用图标模式就很适合了。void setViewMode(ViewMode mode),图标模式下Icon会变得很大。

list->setViewMode(QListWidget::IconMode);

blob.png

若不要文本,只需要把文本设置为空即可。


作者:fearlazy。



版权声明:本文仅代表个人观点,仅供参考! fearlazy和大家一起进步!更多内容看 www.fearlazy.com https://blog.csdn.net/can3981132/article/details/79969079

【系列课】Springmvc4+Mybatis3+Spring4+Bootstrap3之列表

【技术架构】 把手教你整合最优雅SSM4框架: 当我们看大部分教学课堂中把SSH作为最核心教学内容。但实际互联网企业应用中,SpringMVC可以完全替代Struts系列,注解方式,通过restful风格,再配上企业实战架构SpringMVC4 , Spring 4, MyBatis3,JQuery,JQueryUI,Echarts3,Bootstrap3,Ajax堪称完美。
  • 2017年05月02日 22:56

c程序基本算法百例之八—借书方案知多少

#include"stdio.h" int main() { int a,b,c,count=0; printf("借书方案为:/n"); for(a=1;a...
  • garnett2003
  • garnett2003
  • 2011-05-15 16:06:00
  • 793

(百例编程)8.借书方案知多少

题目:小明有五本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法? #include using namespace std; int main(void) ...
  • csy981848153
  • csy981848153
  • 2012-05-26 13:17:26
  • 322

mysqldump与innobackupex备份过程你知多少(二)

沃趣科技  罗小波 1.2.3. 使用WITH CONSISTENT SNAPSHOT子句的作用 START TRANSACTION语句使用WITH CONSIST...
  • woqutechteam
  • woqutechteam
  • 2017-07-14 15:47:48
  • 236

mysqldump与innobackupex备份过程你知多少(三)

沃趣科技  罗小波 mysqldump有什么坑吗? 想必大家都知道,mysqldump备份时可以使用--single-transaction + --master-data两个选项...
  • woqutechteam
  • woqutechteam
  • 2017-07-14 15:48:55
  • 248

Windows登录类型知多少 Windows登录类型知多少-

  • 2008年10月25日 17:08
  • 309KB
  • 下载

项目管理之软件文档知多少

  • 2009年04月12日 10:46
  • 7KB
  • 下载

ajax原理你知多少

原文出自:IT博客吧(http://www.itblog8.cn/it/javascript/20130528132.html) 在写这篇文章之前,曾经写过一篇关于AJAX技术的随笔,不过涉及到的方...
  • keko_boy
  • keko_boy
  • 2013-05-28 17:34:18
  • 1240

NSWindow知多少?

如果你有其他的平台的經驗,來寫 Cocoa 應用程式,可能會發現 NSWindow 的行為跟你想得似乎不太一樣。 ※ NSWindow 屬於 View 雖然現在的 GUI 應用程式的架構大都遵...
  • xxq_2011
  • xxq_2011
  • 2012-12-09 21:34:02
  • 3430

开源协议知多少开源协议知多少

  • 2009年08月16日 10:52
  • 3KB
  • 下载
收藏助手
不良信息举报
您举报文章:Qt列表知多少?
举报原因:
原因补充:

(最多只允许输入30个字)