关于qt中qlistwidget列表控件,qtablewidget表格控件,qtreewidget树形控件跟vc中clistbox,clistctrl,ctreectrl使用差不多,都是通过一个对应的item对象(QListWidgetItem,QTableWidgetItem,QTreeWidgetItem),来操作每一行记录。这里把它们放到一起,用一个遍历目录下所有文件的程序演示下:
//遍历目录下文件QDirIterator
ui->tableWidget->setColumnCount(3);//设置表控件的列数目
//QStringList可以直接用{字符串,字符串...}这样形式简写。
ui->tableWidget->setHorizontalHeaderLabels({"文件名","大小(字节)","修改时间"});//设置表控件的所有头部,对应列数。
ui->treeWidget->setHeaderLabels({"索引","文件名"});//设置树形控件头部,可以有多列,这里只写两列。
QDirIterator it("E:\\linuxc",
QStringList()<<"*.h",
QDir::Files,
QDirIterator::Subdirectories);
i=0;
QString sName,sSize,sTime;
while (it.hasNext())
{
it.next();//指向下一个文件节点,返回当前节点数据
//filePath获取文件名
sName=it.filePath();
//QString::number把int转为QString
sSize=QString::number(it.fileInfo().size());
//QDateTime转为QString,使用toString("yyyy-MM-dd hh:mm:ss")
sTime=it.fileInfo().lastModified().toString("yyyy-MM-dd hh:mm:ss");
//列表控件QListWidget使用
QListWidgetItem *item=new QListWidgetItem(QIcon(":/myimage/images/2.ICO"),sName);
ui->listWidget->addItem(item);//添加一行数据
//表格控件QTableWidget使用
ui->tableWidget->insertRow(i);//插入一行记录,索引i从0开始第一行
QTableWidgetItem *newItem0 = new QTableWidgetItem(QIcon(":/myimage/images/3.ICO"),sName);
ui->tableWidget->setItem(i, 0, newItem0);//设置第几行第几列的数据
QTableWidgetItem *newItem1 = new QTableWidgetItem(sSize);
ui->tableWidget->setItem(i, 1, newItem1);
QTableWidgetItem *newItem2 = new QTableWidgetItem(sTime);
ui->tableWidget->setItem(i, 2, newItem2);
//树形控件QTreeWidget使用
QTreeWidgetItem *titem=new QTreeWidgetItem({QString::number(++i),sName});//把索引递增+1
ui->treeWidget->addTopLevelItem(titem);//添加顶部节点
QTreeWidgetItem *tcsizeitem=new QTreeWidgetItem({"大小(字节)",sSize});
titem->addChild(tcsizeitem);//addChild添加子节点
QTreeWidgetItem *tcdtitem=new QTreeWidgetItem({"修改时间",sTime});
tcsizeitem->addChild(tcdtitem);//再次添加子节点
}
运行结果如下: