您的位置:首页 > 房产 > 家装 > 国内10大设计公司_出名的设计公司_长沙正规关键词优化价格从优_互动营销用在哪些推广上面

国内10大设计公司_出名的设计公司_长沙正规关键词优化价格从优_互动营销用在哪些推广上面

2024/12/23 9:43:12 来源:https://blog.csdn.net/m0_74099572/article/details/143958300  浏览:    关键词:国内10大设计公司_出名的设计公司_长沙正规关键词优化价格从优_互动营销用在哪些推广上面
国内10大设计公司_出名的设计公司_长沙正规关键词优化价格从优_互动营销用在哪些推广上面

Qt中的多元素控件

Qt提供的多元素控件有:

这里的多元素控件都是两两一对的。

xxWidget和xxView的一个比较简单的理解就是:

xxView是更底层的实现, xxWidget是基于xxView封装来的。

可以说,xxView使用起来比较麻烦,但是能实现更复杂的功能。

xxWidget使用起来简单,但是功能有限。

xxWidget 和 xxView 之间的区别
以 QTableWidget 和 QTableView 为例.
QTableView 是基于 MVC 设计的控件. QTableView ⾃⾝不持有数据. 使⽤ QTableView 的
时候需要⽤⼾创建⼀个 Model 对象 (⽐如 QStandardModel ), 并且把 Model 和
QTableView 关联起来. 后续修改 Model 中的数据就会影响 QTableView 的显⽰; 修改
QTableView 的显⽰也会影响到 Model 中的数据(双向绑定).
QTableWidget 则是 QTableView 的⼦类, 对 Model 进⾏了封装. 不需要⽤⼾⼿动创建
Model 对象, 直接就可以往 QTableWidget 中添加数据了

后续主要就是介绍了xxWidget了。

QListWidget 

使⽤ QListWidget 能够显⽰⼀个纵向的列表

比如:

每个选项都可以被选中。

核心属性:

核心方法:

核心信号:

在上述介绍中, 涉及到⼀个关键的类, QListWidgetItem .
这个类表⽰ QListWidget 中的⼀个元素.
核⼼⽅法如下, 本质上就是⼀个 "⽂本+图标" 构成的

使⽤ ListWidget 

我们也可以先用list View,然后右键,可以将其变形成ListWidget

 

ListWidget ListView 的⼦类, 功能⽐ ListView 更丰富 

 比如这样一个界面,我们想对这个listWidget进行新增和删除。

如上,这个信号就是当前选中是否发生改变,第一个形参表示当前选中的,第二个形参表示上次选中的。

 这个Qt帮我们生成的slot会报错,这是因为我们没有包含QListWidgetItem这个类。

关于新增和删除按钮的槽函数定义:

补充:

QTabWidget 

使⽤ QTableWidget 表⽰⼀个表格控件. ⼀个表格中包含若⼲⾏, 每⼀⾏⼜包含若⼲列.
表格中的每个单元格, 是⼀个 QTableWidgetItem 对象

 

QTableWidget 核⼼⽅法

 

QTableWidgetItem 核⼼信号 

 

 QTableWidgetItem 核⼼⽅法

 

使⽤ QTableWidget 

 

 效果:

我们可以再初始化一下数据:
 

 

 

然后编写槽函数

 

演示:
 

默认情况下, 单元格中的内容直接就是可编辑的.
如果不想让⽤⼾编辑, 可以设置 ui->tableWidget-
>setEditTriggers(QAbstractItemView::NoEditTriggers);

 

 

Tree Widget 

使⽤ QTreeWidget 表⽰⼀个树形控件. ⾥⾯的每个元素, 都是⼀个 QTreeWidgetItem , 每个
QTreeWidgetItem 可以包含多个⽂本和图标, 每个⽂本/图标为⼀个 列.
可以给 QTreeWidget 设置顶层节点(顶层节点可以有多个), 然后再给顶层节点添加⼦节点, 从⽽构成树形结构.

 

可以想象成这样:

 

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在这里设计的有点挫的地方。

演示效果:

 

上面的这些控件,数据都是在内存中保存的,程序重启之后就会重置。 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com