QT树控件 QTreeView

看了下面的例子,你就明白了

方法一:使用QDirModel进行目录的现实,QDirModel是QT中专为文件目录树型显示所提供的一种model。 具体使用如下:

#include <QtGui>
int main(int argc, char *argv[])
{ 
QApplication app(argc, argv);
QSplitter *splitter = new QSplitter;
QDirModel *model = new QDirModel;
//从缺省目录创建数据
QTreeView *tree = new QTreeView(splitter);
tree->setModel(model);
tree->setRootIndex(model->index("c:\\"));
//配置一个view去显示model中的数据,只需要简单地调用setModel(),并把目录model作为参数传递
//setRootIndex()告诉views显示哪个目录的信息,这需要提供一个model index,然后用这个
//model index去model中去获取数据
//index()这个函数是QDirModel特有的,通过把一个目录做为参数,得到了需要的model index
//其他的代码只是窗口show出来,进入程序的事件循环就好了
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); //中文显示
QTextCodec *codec = QTextCodec::codecForLocale();
QString a = codec->toUnicode("目录");
splitter->setWindowTitle(a);
splitter->show();
return app.exec();
}


显示结果如下所示:


方法二:自行设置树型结构。

"Treeview.h"文件

#include <QtGui>
class TreeView :public QTreeView
{
public:
TreeView();
void iterateOverItems();
QList<QStandardItem*> returnTheItems();
void mouseDoubleClickEvent(QMouseEvent *event);
private:
QStandardItemModel *model;
};


"Treeview.cpp"文件

#include "treeview.h"
TreeView::TreeView() : QTreeView()
{ 
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
model = new QStandardItemModel(4,2);
model->setHeaderData(0, Qt::Horizontal, tr("Service"));
model->setHeaderData(1, Qt::Horizontal, tr("Details"));
QStandardItem *item1 = new QStandardItem("avahi-daemon");
item1->setIcon(QIcon("gparted.png"));
QStandardItem *item2 = new QStandardItem("bluetooth");
item2->setIcon(QIcon("gparted.png"));
QStandardItem *item3 = new QStandardItem("crond");
item3->setIcon(QIcon("gparted.png")); 
QStandardItem *item4 = new QStandardItem("cups");
item4->setIcon(QIcon("gparted.png")); 
model->setItem(0, 0, item1);
model->setItem(1, 0, item2);
model->setItem(2, 0, item3);
model->setItem(3, 0, item4);
QStandardItem *item5 = new QStandardItem("fifth");
item4->appendRow(item5);
QModelIndex parent;
for (int i = 0; i < 4; ++i) {
parent = model->index(0, 0, parent);
model->insertRows(0, 1, parent);
model->insertColumns(0, 1, parent);
QModelIndex index = model->index(0, 0, parent);
model->setData(index, i);
}
this->setModel(model);
}
QList<QStandardItem*> TreeView::returnTheItems()
{
return model->findItems("*", Qt::MatchWildcard | Qt::MatchRecursive);
}
void TreeView::iterateOverItems()
{
QList<QStandardItem*> list = returnTheItems();
foreach (QStandardItem* item, list) {
qDebug() << item->text();
}
}
void TreeView::mouseDoubleClickEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
QModelIndex index0 = currentIndex();
qDebug() << index0.data().toString();
}
}


"Main.cpp"文件

#include <QtGui/QApplication>
#include "treeview.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
TreeView view;
view.setEditTriggers(QAbstractItemView::NoEditTriggers); 
view.header()->setResizeMode(QHeaderView::ResizeToContents);
view.resize(300,280);
view.iterateOverItems();
view.setWindowTitle(QObject::tr("Linux 服务管理"));
view.show();
return app.exec();
}


显示:

QT树控件 QTreeView_第1张图片

以上就是TreeView的两种Model了

你可能感兴趣的:(linux,list,service,tree,qt,Codec)