Qt中的多元素控件
Qt提供的多元素控件有:
这里的多元素控件都是两两一对的。
xxWidget和xxView的一个比较简单的理解就是:
xxView是更底层的实现, xxWidget是基于xxView封装来的。
可以说,xxView使用起来比较麻烦,但是能实现更复杂的功能。
xxWidget使用起来简单,但是功能有限。
后续主要就是介绍了xxWidget了。
QListWidget
使⽤ QListWidget 能够显⽰⼀个纵向的列表
比如:
每个选项都可以被选中。
核心属性:
核心方法:
核心信号:
使⽤ ListWidget
我们也可以先用list View,然后右键,可以将其变形成ListWidget
ListWidget 是 ListView 的⼦类, 功能⽐ ListView 更丰富
比如这样一个界面,我们想对这个listWidget进行新增和删除。
如上,这个信号就是当前选中是否发生改变,第一个形参表示当前选中的,第二个形参表示上次选中的。
这个Qt帮我们生成的slot会报错,这是因为我们没有包含QListWidgetItem这个类。
关于新增和删除按钮的槽函数定义:
补充:
QTabWidget
QTableWidget 核⼼⽅法:
QTableWidgetItem 核⼼信号
QTableWidgetItem 核⼼⽅法
使⽤ QTableWidget
效果:
我们可以再初始化一下数据:
然后编写槽函数
演示:
Tree Widget
可以想象成这样:
QTreeWidget 核⼼⽅法
QTreeWidget 核⼼信号
QTreeWidgetItem 核⼼属性
QTreeWidgetItem 核⼼⽅法
使⽤ QTreeWidget
初始化:
定义槽函数
void Widget::on_pushButton_addtop_clicked()
{QString text = ui->lineEdit->text();if(text.isEmpty()) return;QTreeWidgetItem* item = new QTreeWidgetItem();item->setText(0,text);ui->treeWidget->addTopLevelItem(item);ui->lineEdit->clear();
}void Widget::on_pushButton_addcur_clicked()
{// 获取当前选中的结点QTreeWidgetItem* curItem = ui->treeWidget->currentItem();if(curItem == nullptr) return;QString text = ui->lineEdit->text();if(text.isEmpty()) return;QTreeWidgetItem* newItem = new QTreeWidgetItem();newItem->setText(0,text);// 将item添加到选中结点curItem->addChild(newItem);// 展开父结点,就是每次添加完后会自动展开scurItem->setExpanded(true);ui->lineEdit->clear();
}void Widget::on_pushButton_delcur_clicked()
{// 获取当前选中的结点QTreeWidgetItem* curItem = ui->treeWidget->currentItem();if(curItem == nullptr) return;// 这里还需要再获取当期结点的父结点QTreeWidgetItem* parent = curItem->parent();if(parent == nullptr){// 说明自身已经是顶层结点了。int index = ui->treeWidget->indexOfTopLevelItem(curItem);ui->treeWidget->takeTopLevelItem(index);}else{parent->removeChild(curItem);}
}
在删除槽函数的操作那里,需要先判断当前删除的结点是否是顶层结点,两种情况的删除方式不一致,这也是Qt在这里设计的有点挫的地方。
演示效果:
上面的这些控件,数据都是在内存中保存的,程序重启之后就会重置。