1 Star 11 Fork 6

胡歌-此生不换/Qt-Project

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Qt 项目视图便捷类

1. Qt 项目视图便捷类

Qt 项目视图提供了一些便捷类,包括 QListWidgetQTableWidgetQTreeWidget 等,我们分别介绍这几个便捷类。 我们先创建一个 Qt Application 应用,然后在 mainwindow 的构造函数中创建一个 listwidget:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    auto listWidget = new QListWidget(this);
    QListWidgetItem* listWidgetItem = new QListWidgetItem;
    listWidgetItem->setText("listItem");
    QPixmap pixmap(50, 50);
    pixmap.fill(Qt::blue);
    listWidgetItem->setIcon(pixmap);
    listWidgetItem->setToolTip("this id list Item");
    listWidget->insertItem(1, listWidgetItem);

    QListWidgetItem* listWidgetItem2 = new QListWidgetItem;
    listWidgetItem2->setText("listItem2");
    QPixmap pixmap2(50, 50);
    pixmap2.fill(Qt::green);
    listWidgetItem2->setIcon(pixmap2);
    listWidgetItem2->setToolTip("this is list item2");
    listWidget->insertItem(2, listWidgetItem2);

    listWidget->sortItems(Qt::DescendingOrder);
    listWidget->show();
    this->setCentralWidget(listWidget);
}

运行效果如下:

Alt text

接下来我们在 mainwindow.h 里添加 QTableWidgetQTreeWidget 成员变量:

    QTreeWidget * _treeWidget;
    QTableWidget * _tableWidget;

然后继续在 mainwindow 的构造函数中创建 TableWidgetTreeWidget

    _treeWidget = new QTreeWidget();
    // _treeWidget 要设置列数
    _treeWidget->setColumnCount(2);
    QStringList heards;
    heards << "name" << "yaer";

    // 添加项目

    // 父节点是 _treeWidget
    QTreeWidgetItem* grade1 = new QTreeWidgetItem(_treeWidget);
    grade1->setText(0, "Grade1");
    // 父节点是 grade1
    QTreeWidgetItem* student = new QTreeWidgetItem(grade1);
    student->setText(0, "student");
    student->setText(1, "1996");

    // 父节点是 grade1,在 student 之后
    QTreeWidgetItem* student2 = new QTreeWidgetItem(grade1, student);
    student2->setText(0, "student2");
    student2->setText(1, "1988");

    // 父节点是 _treeWidget,在 grade1 之后
    QTreeWidgetItem* grade2 = new QTreeWidgetItem(_treeWidget, grade1);
    grade2->setText(0, "Grade2");

    // 父节点是 grade1,在 student2 之后
    QTreeWidgetItem* student3 = new QTreeWidgetItem(grade1, student2);
    student3->setText(0, "student3");
    student3->setText(1, "1989");

    _treeWidget->show();

我们创建了一个 TreeWidget,创建 TreeWidget 要指明列数量,然后创建了头信息,接下来利用 QTreeWidgetItem 的构造函数创建了一些 item,两个参数的构造函数,第一个参数是 item 的父节点,第二个参数是其兄弟节点。运行之后效果如下:

Alt text

我们可以根据 item 的父节点是否为空判断其是否为顶层节点,然后执行删除节点操作:

    // 删除 student3,先获取其父节点
    auto* parent_student3 = student3->parent();
    // 获取 student3 在其父节点下的 index
    auto index_student3 = parent_student3->indexOfChild(student3);
    // 根据 index 删除 student3
    delete parent_student3->takeChild(index_student3);

    // 删除 grade2
    auto* parent_grade2 = grade2->parent();
    // grade2 为顶层节点,所以其父节点必为 nullptr
    assert(parent_grade2 == nullptr);
    // 通过 treeWidgget 获取 grade2 的 index
    auto index_grade2 = _treeWidget->indexOfTopLevelItem(grade2);
    delete _treeWidget->takeTopLevelItem(index_grade2);

创建 QTableWidget:

    // 创建表格指定行号和列号
    _tableWidget = new QTableWidget(3, 2);
    // 创建表格项目,将其插入到表格中
    QTableWidgetItem* tableWidgetItem = new QTableWidgetItem("qt");
    _tableWidget->setItem(1, 1, tableWidgetItem);
    // 创建表头
    QTableWidgetItem* headerV = new QTableWidgetItem("first");
    _tableWidget->setVerticalHeaderItem(0, headerV);
    QTableWidgetItem* headerH = new QTableWidgetItem("ID");
    _tableWidget->setHorizontalHeaderItem(0, headerH);

    _tableWidget->show();

Alt text

2. 实现拖拽

有时我们需要实现拖拽操作, 我们可以在之前实现的 listWidget 设置一些拖拽属性。

    // 设置list为单选模式
    listWidget->setSelectionMode(QAbstractItemView::SingleSelection);
    // 启用拖动
    listWidget->setDragEnabled(true);
    // 设置接受拖放
    listWidget->viewport()->setAcceptDrops(true);
    // 设置显示将要放置的位置
    listWidget->setDropIndicatorShown(true);
    // 设置拖放模式为移动项目,如果不设置,则为复制项目
    listWidget->setDragDropMode(QAbstractItemView::InternalMove);
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ax020913/qt-project.git
git@gitee.com:ax020913/qt-project.git
ax020913
qt-project
Qt-Project
master

搜索帮助