Qt6教程之二(5) item widgets

本文介绍了Qt中的itemwidgets系列控件,包括listwidget、treewidget和tablewidget,分别展示了它们在数据展示方面的用法,如列表、树形和表格结构。通过代码示例演示了如何添加项目、响应点击事件,并提供了简单的API使用说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章主要是介绍Qt的item widgets系列控件,主要包括list widget、tree widget、table widget三个控件,这三个控件在数据量不大的情况下比较实用,因为自带数据的处理及显示,使用起来非常方便。

list widget 叫列表视图,以列表的形式向用户展现数据;

tree widget 叫树形控件,以树型结构展示数据的父子关系;

table widget叫表格控件,以表格结构展现数据;

下面将进行逐一演示,这里不会针对所有的API进行行一一列举,仅仅是挑一些常用的API进行演示,让大家知道这个控件原来是这样使用的。

为了提高编码基本功,下述三个控件都将以纯代码的方式进行演示,话不多说,开始敲代码吧!

工程结构:

1、list widget

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QListWidgetItem>
#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void MSG(QListWidgetItem *item); //定义一个槽,用于写点击listwidget项时的逻辑


};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

#include <QListWidget>
#include<QMessageBox>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

//设置窗口大小及标题
    resize(800,400);
    setWindowTitle("item widgets");

//创建对象并设置窗口大小
    QListWidget  *listWidget=new QListWidget(this);
    listWidget->resize(800,400);


//添加列表项
    listWidget->addItem("china");
    listWidget->addItem("USA");
    listWidget->addItem("Japan");
    listWidget->addItem(new QListWidgetItem("Qt6"));
    


//连接信号与槽,当点击列表项时处理其响应逻辑
connect(listWidget,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(MSG(QListWidgetItem*)));


}

MainWindow::~MainWindow()
{
}

void MainWindow::MSG(QListWidgetItem *item)
{
    QMessageBox msg;
    msg.setText(item->text());
    msg.exec();
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

运行效果:

2、tree widget

 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QListWidgetItem>
#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    //定义一个槽,用于写点击treewidget项时的逻辑
    void MSG(QTreeWidgetItem* item,int index);


};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

#include <QListWidget>
#include<QMessageBox>
#include <QTreeWidget>
#include <QTreeWidget>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(800,400);
    setWindowTitle("item widgets");

    QTreeWidget  *treeWidget=new QTreeWidget(this);
    treeWidget->resize(800,400);
    treeWidget->setHeaderLabel("tree widget");
    treeWidget->setColumnCount(1);

    QTreeWidgetItem *qtw=new QTreeWidgetItem(QStringList()<<"root");
    treeWidget->addTopLevelItem(qtw);
    qtw->addChild(new QTreeWidgetItem(QStringList()<<"qq"));
    qtw->addChild(new QTreeWidgetItem(QStringList()<<"wechat"));
    qtw->addChild(new QTreeWidgetItem(QStringList()<<"chatGPT"));
    qtw->addChild(new QTreeWidgetItem(QStringList()<<"ttwter"));
    qtw->addChild(new QTreeWidgetItem(QStringList()<<"wsb"));

    connect(treeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(MSG(QTreeWidgetItem*,int)));


}

MainWindow::~MainWindow()
{
}

void MainWindow::MSG(QTreeWidgetItem* item,int index)
{
    QMessageBox msg;
    msg.setText(item->text(index));
    msg.exec();
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

运行效果:

3、table widget

 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QListWidgetItem>
#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    
    void MSG(QTableWidgetItem *item);


};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

#include <QListWidget>
#include<QMessageBox>
#include <QTableWidget>
#include <QTreeWidget>
#include <QTreeWidget>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(800,400);
    setWindowTitle("item widgets");

    QTableWidget  *tableWidget=new QTableWidget(10,10,this);
    tableWidget->resize(800,400);
    tableWidget->setItem(0,0,new QTableWidgetItem("nuber"));
    tableWidget->setItem(1,0,new QTableWidgetItem("11"));
    tableWidget->setItem(2,0,new QTableWidgetItem("22"));
    tableWidget->setItem(3,0,new QTableWidgetItem("33"));
    tableWidget->setItem(4,0,new QTableWidgetItem("44"));
    tableWidget->setItem(5,0,new QTableWidgetItem("55"));

    connect(tableWidget,SIGNAL(itemClicked(QTableWidgetItem*)),this,SLOT(MSG(QTableWidgetItem*)));


}

MainWindow::~MainWindow()
{
}

void MainWindow::MSG(QTableWidgetItem *item)
{
    QMessageBox msg;
    msg.setText(item->text());
    msg.exec();
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

运行效果:

下一篇文章链接:二 Qt控件之六:contains

上一篇文章:Qt6教程之二(4) item views

### Qt Designer 中 Item Widgets 的使用 #### 使用 QListWidget 控件 在 Qt Designer 中,`QListWidget` 是一种列表视图控件,允许用户显示项目列表并与其交互。为了向 `QListWidget` 添加条目,可以按照如下方式操作: 通过 C++ 或 Python 代码动态添加条目的例子如下所示[^2]: ```cpp #include <QListWidget> // 创建一个新的 QListWidgetItem 并设置其文本为 "标题" QListWidgetItem *qitem = new QListWidgetItem("标题"); // 将新创建的条目添加到 listWidget 中 ui->listWidget->addItem(qitem); // 设置条目的对齐方式为中心对齐 qitem->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter); // 向 listWidget 中批量添加字符串列表作为新的条目 QStringList slist; slist << "111222"; slist << "333444"; ui->listWidget->addItems(slist); ``` #### 配置 QTreeWidget 控件 对于树形结构的数据展示需求,则可以选择 `QTreeWidget` 来构建分层式的节点关系。 - **添加顶层项** 可以调用 `QTreeWidgetItem(QTreeWidget*)` 构造函数来实例化顶级项,并将其加入到 `QTreeWidget` 容器内。 - **追加子级项** 利用 `addChild()` 方法可以在已有的父节点下挂载更多层次的孩子节点;也可以直接利用带参数版本的构造函数指定父对象完成嵌套定义。 下面是一个简单的示例说明如何初始化一棵具有两层深度的小型树状结构[^3]: ```cpp QTreeWidgetItem* rootItem = new QTreeWidgetItem(ui->treeWidget, QStringList() << "Root"); for (int i=0;i<5;++i){ QString childText(QString("Child %1").arg(i)); QTreeWidgetItem* item = new QTreeWidgetItem(rootItem, QStringList()<<childText); } ``` #### 应用 QTableWidget 表格组件 当涉及到二维表格形式的信息呈现时,`QTableWidget` 成为了理想的选择之一。此部件支持行列布局以及单元格级别的编辑功能。 要填充表单内容,通常先设定好行数列数再逐个位置填入具体数值即可。另外还存在一些辅助性的接口帮助调整样式属性比如字体颜色大小等等[^1]: ```cpp // 假设我们有一个名为 tableWidgetQTableWidget 实例 tableWidget->setRowCount(3); // 设定三行 tableWidget->setColumnCount(4); // 和四列 // 插入数据至特定坐标处 for(int row = 0 ;row<tableWidget->rowCount();++row){ for(int col = 0;col<tableWidget->columnCount(); ++col){ QTableWidgetItem *newItem = new QTableWidgetItem(QString("%1,%2").arg(row).arg(col)); newItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); tableWidget->setItem(row,col,newItem); } } // 如果想要修改某一行的高度或者某一列宽度的话 tableWidget->setRowHeight(0,80); // 改变第零行高度为80像素 tableWidget->setColumnWidth(1,120); // 调整第二列宽幅达到120px ``` 以上就是在 Qt Designer 下运用三种不同类型的 Item Widget 组件的方法概述。每种 widget 提供了丰富的 API 接口让用户能够灵活定制外观行为特性满足实际应用场景下的多样化要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code_shenbing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值