QT QListWidget、QTreeWidget控件的简单使用
一、简述
记--QT QListWidget、QTreeWidget控件的简单例子。
QListWidget例子:链接: https://pan.baidu.com/s/15how2E933Ztt-f_31t-Acg 提取码: 12tp
QTreeWidget例子:链接: https://pan.baidu.com/s/1MSTwEyJzCWAfMVmUZ9B7Lg 提取码: 2a8d
二、QListWidget例子
2.1 效果
2.2 工程结构
2.3 源文件
ListWidgetDemo.pro文件
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ListWidgetDemo
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_actionOpen_triggered();
void on_listWidget_doubleClicked(const QModelIndex &index);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
main.cpp文件
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>//文件对话框
#include <QFileInfo>//文件信息相关
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionOpen_triggered()//Open菜单的响应槽函数
{
//打开文件对话框,选择文件(可以多个),返回选中的文件绝对路径集合
QStringList list = QFileDialog::getOpenFileNames(this);
//list列表中,存放的是文件的文件路径
//循环分别读取列表中的每一条的内容
//打开文件,得到文件的名字,显示到listWidget
for(int i=0;i<list.count();i++)
{
QString filepath = list.at(i);
QFileInfo info(filepath);
QString fileName = info.fileName();//从绝对路径中取出文件名及后缀
ui->listWidget->addItem(fileName);//添加到listWidget
}
}
void MainWindow::on_listWidget_doubleClicked(const QModelIndex &index)//listWidget数据项的双击响应槽函数
{
QString filePath = ui->listWidget->currentItem()->text(); //获得当前条目上的内容:文件的路径
QFile file(filePath);
bool isOk = file.open(QIODevice::ReadOnly);
if(isOk)
{
QByteArray array = file.readAll();//读取文件内容
ui->textBrowser->setText(array);//将文件内容设置到textbroswer
}
file.close();
}
三、QTreeWidget例子
3.1 效果
3.2 工程结构
布局:
3.3 源文件
TreeWidgetDemo.pro文件
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = TreeWidgetDemo
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTreeWidget>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
QTreeWidgetItem *m_itemHdrs;//头文件 子项
QTreeWidgetItem *m_itemSrcs;//源文件 子项
QTreeWidgetItem *m_itemUIs;//界面文件 子项
QTreeWidgetItem *m_itemOthers;//其它文件 子项
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_actionOopen_triggered();//Open菜单项的点击响应槽函数
void on_treeWidget_doubleClicked(const QModelIndex &index);//QTreeWidget选项的双击响应槽函数
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
main.cpp文件
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>//文件对话框
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->treeWidget->setColumnCount(1);//设置列数
ui->treeWidget->setHeaderLabel("项目结构");//设置标题
//设置水平滚动条
ui->treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);//大小适配内容
ui->treeWidget->header()->setStretchLastSection(false);//作用:当内容过长时也全部显示,不会将超出的部分用...表示
ui->treeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);//需要时(内容长度大于控件长度时)显示水平滚动条
m_itemHdrs = new QTreeWidgetItem((QTreeWidget*)0, QStringList("头文件"));
m_itemSrcs = new QTreeWidgetItem((QTreeWidget*)0, QStringList("源文件"));
m_itemUIs = new QTreeWidgetItem((QTreeWidget*)0, QStringList("界面文件"));
m_itemOthers = new QTreeWidgetItem((QTreeWidget*)0, QStringList("其它文件"));
ui->treeWidget->insertTopLevelItem(0, m_itemOthers);//在第0列添加,(头插法,后添加的在上面)
ui->treeWidget->insertTopLevelItem(0, m_itemUIs);
ui->treeWidget->insertTopLevelItem(0, m_itemSrcs);
ui->treeWidget->insertTopLevelItem(0, m_itemHdrs);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionOopen_triggered()//Open 菜单的点击响应函数
{
//打开文件对话框,选择文件(可以多个),返回选中的文件绝对路径集合
QStringList list = QFileDialog::getOpenFileNames(this, "请选择文件", "D:\\QtProj\\TreeWidgetDemo");
//list列表中,存放的是文件的文件路径
//循环分别读取列表中的每一条的内容
//打开文件,得到文件的名字,显示到listWidget
for(int i=0; i<list.count(); i++)
{
QString filepath = list.at(i);
QFileInfo info(filepath);
QString fileName = info.fileName();//从绝对路径中取出文件名及后缀
QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidget*)0, QStringList(fileName));//创建子项
if(fileName.endsWith(".h"))//以.h结尾
{
m_itemHdrs->addChild(item);//添加到头文件 类别
}
else if(fileName.endsWith(".cpp"))//以.cpp结尾
{
m_itemSrcs->addChild(item);//添加到源文件 类别
}
else if(fileName.endsWith(".ui"))//以.ui结尾
{
m_itemUIs->addChild(item);//添加到界面文件 类别
}
else
{
m_itemOthers->addChild(item);//添加到其它文件 类别
}
}
}
void MainWindow::on_treeWidget_doubleClicked(const QModelIndex &index)//双击列表项 的响应函数
{
QString filePath = ui->treeWidget->currentItem()->text(0); //获得当前条目上的内容:文件的路径
QFile file("D:\\QtProj\\TreeWidgetDemo\\"+filePath);//应该获取 打开的文件的路径
bool isOk = file.open(QIODevice::ReadOnly);
if(isOk)
{
QByteArray array = file.readAll();//读取文件内容
ui->textBrowser->setText(array);//将文件内容设置到textbroswer
}
file.close();//关闭文件
}