Qt控件---多元素类

发布于:2024-04-15 ⋅ 阅读:(100) ⋅ 点赞:(0)

QListWidget(纵向列表)

QListWidget里的每个元素都为 QListWidgetItem 类型的

属性 说明
currentRow 当前是第几行被选中
count 一共有多少行
sortingEnabled 是否允许排序
isWrapping 是否允许换行
itemAlignment 元素的对齐方式
selectRectVisible 被选中元素矩形是否可见
spacing 元素之间的间隔
方法 说明
addItem(const QString& label) addItem(QListWidgetItem *item) 添加元素
currentItem() 返回当前选中的元素
setCurrentItem(QListWidgetItem* item) 设置选中元素
setCurrentRow(int row) 设置选中第几行的元素
insertItem(const QString& label, int row) insertItem(QListWidgetItem *item, int row) 在指定位置插入元素
item(int row) 返回表示 row 行的元素
takeItem(int row) 删除指定行的元素,并返回这个被删除的元素
信号 说明
currentItemChanged(QListWidgetItem* current, QListWidgetItem* old) 选中不同元素时触发,参数为当前选中的元素和之前选中的元素
currentRowChanged(int) 选中不同元素时触发,参数为当前选中元素的行数
itemClicked(QListWidgetItem* item) 点击某个元素时触发
itemDoubleClicked(QListWidgetItem* item) 双击某个元素时触发
itemEntered(QListWidgetItem* item) 鼠标进入元素时触发

使用

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

    // 初始化列表的值
    ui->listWidget->addItem("C++");
    ui->listWidget->addItem("Java");
    ui->listWidget->addItem("Qt");
}

// 新增按钮点击触发事件
void Widget::on_pushButton_clicked()
{
    // 获取输入框内容
    const QString &text = ui->lineEdit->text();
    // 判空
    if(text.isEmpty()) return;
    // 插入列表
    ui->listWidget->addItem(text);
}

// 删除按钮点击触发事件
void Widget::on_pushButton_2_clicked()
{
    // 获取列表中当前选中元素的行数
    int row = ui->listWidget->currentRow();
    // 删除
    ui->listWidget->takeItem(row);
}

imgimg

QTableWidget(表格)

QTableWidget中的每一个元素都是 QTableWidgetItem 类型的

方法 说明
item(int row, int column) 根据行列获取指定内容
setItem(int row, int column, QTableWidget*) 根据行列设置元素
currentItem() 返回选中的元素
currentRow() 返回被选中元素是第几行
currentColumn() 返回被选中元素是第几列
row(QTableWidgetItem* ) 获取指定item的行号
column(QTableWidgetItem* ) 获取指定item的列号
rowCount() 获取表格的行数
columnCount() 获取表格的列数
insertRow(int row) 在第 row 行插入新行
insertColumn(int column) 在第 column 列插入新列
removeRow(int row) 删除第 row 行
removeColumn(int column) 删除第 colimn 列
setHorizontalHeaderItem(int column, QTableWidget*) 设置指定列的表头
setVerticalHeaderItem(int row, QTableWidget*) 设置指定行的表头
信号 说明
cellClicked(int row, int column) 点击单元格触发
cellDoubleClicked(int row, int column) 双击单元格触发
cellEntered(int row, int column) 鼠标进入单元格触发
currentCellChanged(int row, int column, int previousRow, int previousColumn) 选中不同单元格触发

使用

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

    ui->tableWidget->insertRow(0); // 设置一个行
    // 设置三个列
    ui->tableWidget->insertColumn(0);
    ui->tableWidget->insertColumn(1);
    ui->tableWidget->insertColumn(2);

    // 设置列名
    ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("学号"));
    ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("姓名"));
    ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("性别"));

    // 设置初始值
    ui->tableWidget->setItem(0, 0, new QTableWidgetItem("0001"));
    ui->tableWidget->setItem(0, 1, new QTableWidgetItem("张三"));
    ui->tableWidget->setItem(0, 2, new QTableWidgetItem("男"));
}

// 新增一行按钮
void Widget::on_pushButton_clicked()
{
    // 获取当前行数
    int row = ui->tableWidget->rowCount();
    // 插入新行
    ui->tableWidget->insertRow(row);
}

// 新增一列按钮
void Widget::on_pushButton_3_clicked()
{
    // 获取当前列数
    int lie = ui->tableWidget->columnCount();
    // 插入新列
    ui->tableWidget->insertColumn(lie);
    // 设置列名
    const QString &text = ui->lineEdit->text();
    ui->tableWidget->setHorizontalHeaderItem(lie, new QTableWidgetItem(text));
}

// 删除选中行
void Widget::on_pushButton_2_clicked()
{
    // 获取当前行号
    int row = ui->tableWidget->currentRow();
    // 删除行
    ui->tableWidget->removeRow(row);
}

// 删除选中列
void Widget::on_pushButton_4_clicked()
{
    // 获取当前列号
    int lie = ui->tableWidget->currentColumn();
    // 删除列
    ui->tableWidget->removeColumn(lie);
}

img

img

QTreeWidget(树形控件)

QTreeWidget里的每个元素都是 QTreeWidgetItem 类型的

方法 说明
clear 清空所有子节点
addTopLevelItem(QTreeWidgetItem* item) 新增顶层节点
topLevelItem(int index) 获取指定下标的顶层节点
topLevelItemCount() 获取顶层节点个数
indexOfTopLevelItem(QTreeWidgetItem* item) 查询指定节点是顶层节点中的下标
takeTopLevelItem(int index) 删除指定的顶层节点,并返回删除的元素
currentItem() 获取当前选中的节点
setCurrentItem(QTreeWidgetItem* item) 选中指定节点
setExpanded(bool) 展开/关闭节点
setHeaderLabel(const QString& text) 设置头字段名称
信号 说明
currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* old) 切换选中元素时触发
itemClicked(QTreeWidgetItem* item, int col) 点击元素时触发
itemDoubleClicked(QTreeWidgetItem* item, int col) 双击元素时触发
itemEntered(QTreeWidgetItem* item, int col) 鼠标进入时触发
itemExpanded(QTreeWidgetItem* item) 元素被展开时触发
itemCollapsend(QTreeWidgetItem* item) 元素被折叠时触发

QTreeWidgetItem

方法 说明
addChild(QTreeWidgetItem* child) 新增子节点
childCount() 子节点个数
child(int index) 获取指定下标的子节点
takeChild(int index) 删除对应下标的子节点
removeChild(QTreeWidgetItem* child) 删除对应的子节点
parent() 获取该元素的父节点

使用

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

    // 初始化
    QTreeWidgetItem *item = new QTreeWidgetItem();
    item->setText(0, "高校");
    ui->treeWidget->addTopLevelItem(item);
}

// 添加到顶层元素
void Widget::on_pushButton_clicked()
{
    // 获取输入框内容
    const QString &text = ui->lineEdit->text();
    if(text.isEmpty()) return;
    // 添加到顶层节点
    QTreeWidgetItem *item = new QTreeWidgetItem();
    item->setText(0, text);
    ui->treeWidget->addTopLevelItem(item);
}

// 添加到选中元素
void Widget::on_pushButton_2_clicked()
{
    // 获取输入框内容
    const QString &text = ui->lineEdit->text();
    if(text.isEmpty()) return;
    // 获取当前选中的节点
    QTreeWidgetItem *cur = ui->treeWidget->currentItem();
    if(cur == NULL) return;
    // 构造新的item
    QTreeWidgetItem *item = new QTreeWidgetItem();
    item->setText(0, text);
    // 添加到选中节点
    cur->addChild(item);
    // 展开父节点
    cur->setExpanded(true);
}

// 删除选中元素
void Widget::on_pushButton_3_clicked()
{
    // 获取当前选中的节点
    QTreeWidgetItem *cur = ui->treeWidget->currentItem();
    if(cur == NULL) return;
    // 获取当前节点的父节点
    QTreeWidgetItem* parent = cur->parent();

    // 当前节点是顶层节点
    if(parent == NULL)
    {
        int index = ui->treeWidget->indexOfTopLevelItem(cur);
        ui->treeWidget->takeTopLevelItem(index);
    }
    else
    {
        // 不是顶层节点
        parent->removeChild(cur);
    }
}

img

img


今日签到

点亮在社区的每一天
去签到