当前位置: 首页 > wzjs >正文

小型网站开发成本房地产排名前三十强排名

小型网站开发成本,房地产排名前三十强排名,网站建设销售岗位职责,网站开发先做后台还是前台目录 方法一:QSS方法2:自定义复选框委托类一、构造函数 CheckBoxDelegate()二、paint() 方法三、editorEvent() 方法四、关键设计要点五、扩展应用场景六、代码示例(补充) 方法一:QSS QTableView::indicator {position: relative…

目录

  • 方法一:QSS
  • 方法2:自定义复选框委托类
      • 一、构造函数 `CheckBoxDelegate()`
      • 二、`paint()` 方法
      • 三、`editorEvent()` 方法
      • 四、关键设计要点
      • 五、扩展应用场景
      • 六、代码示例(补充)

方法一:QSS

QTableView::indicator {position: relative;  /* 相对定位 */left: 50%;           /* 左边线定位到父容器中心 */
}

缺点:需要计算向右移动一定距离的left

position和left的QSS解释
在这里插入图片描述

方法2:自定义复选框委托类


#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QStyledItemDelegate>
#include <QPainter>
#include <QStyleOptionButton>
#include <QMouseEvent>// 自定义复选框委托类
// 功能:实现在 QTableView 中居中显示复选框,并支持点击交互,结合原样式
class CheckBoxDelegate : public QStyledItemDelegate {
public:// 构造函数explicit CheckBoxDelegate(QObject* parent = nullptr): QStyledItemDelegate(parent) {} // 继承基类构造函数// 重写绘制方法void paint(QPainter* painter,const QStyleOptionViewItem& option,const QModelIndex& index) const override{// 检查当前项是否支持勾选(Qt::ItemIsUserCheckable 标志)if (index.flags() & Qt::ItemIsUserCheckable){// --- 步骤 1: 准备绘制参数 ---QStyleOptionButton checkOption; // 创建复选框的样式选项checkOption.rect = option.rect; // 初始矩形区域设为单元格区域checkOption.state = option.state; // 继承基础状态(如启用、激活状态)// 获取当前项的勾选状态Qt::CheckState checkState = static_cast<Qt::CheckState>(index.data(Qt::CheckStateRole).toInt());// 根据状态设置 QStyle 标志if (checkState == Qt::Checked) {checkOption.state |= QStyle::State_On; // 选中状态}else {checkOption.state |= QStyle::State_Off; // 未选中状态}// --- 步骤 2: 计算居中位置 ---// 获取标准复选框指示器的默认尺寸(例如 16x16)QRect checkRect = option.widget->style()->subElementRect(QStyle::SE_CheckBoxIndicator, // 获取复选框指示器区域&checkOption,                 // 传入样式选项option.widget                 // 关联的控件(用于样式计算));// 将复选框矩形中心对齐到单元格中心checkRect.moveCenter(option.rect.center());checkOption.rect = checkRect; // 更新样式选项中的矩形区域// --- 步骤 3: 绘制复选框 ---// 使用当前控件的样式绘制复选框option.widget->style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, // 绘制复选框基本元素&checkOption,                 // 样式选项painter,                     // 画布option.widget                // 关联的控件(用于样式适配));}else{// 对于非勾选项,调用基类默认绘制方法(例如文本、背景等)QStyledItemDelegate::paint(painter, option, index);}}// 重写事件处理方法(实现点击交互)bool editorEvent(QEvent* event,QAbstractItemModel* model,const QStyleOptionViewItem& option,const QModelIndex& index) override{// 只处理鼠标释放事件(点击完成时触发)if (event->type() == QEvent::MouseButtonRelease){QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);// --- 步骤 1: 计算复选框的实际点击区域 ---QStyleOptionButton checkOption;checkOption.rect = option.rect; // 初始区域为单元格区域// 获取标准复选框指示器的矩形(与绘制时计算方式一致)QRect checkRect = option.widget->style()->subElementRect(QStyle::SE_CheckBoxIndicator,&checkOption,option.widget);// 将矩形中心对齐到单元格中心(确保与绘制的区域一致)checkRect.moveCenter(option.rect.center());// --- 步骤 2: 判断点击是否在复选框区域内 ---if (checkRect.contains(mouseEvent->pos())){// 获取当前勾选状态Qt::CheckState currentState = static_cast<Qt::CheckState>(index.data(Qt::CheckStateRole).toInt());// 切换状态(Checked <-> Unchecked)Qt::CheckState newState = (currentState == Qt::Checked)? Qt::Unchecked: Qt::Checked;// 更新模型数据(触发视图刷新)model->setData(index, newState, Qt::CheckStateRole);return true; // 事件已处理,不再传递}}// 其他事件交由基类处理(例如键盘事件、未点击复选框区域的鼠标事件)return QStyledItemDelegate::editorEvent(event, model, option, index);}
};

在这里插入图片描述

在 Qt 的 QTableView 中,通过自定义委托类 CheckBoxDelegate 实现复选框居中显示和交互功能,其核心逻辑集中在 paint()editorEvent() 方法中。


一、构造函数 CheckBoxDelegate()

功能
继承自 QStyledItemDelegate 并初始化父类,为后续的委托操作提供基础支持。
代码解析

explicit CheckBoxDelegate(QObject* parent = nullptr): QStyledItemDelegate(parent) {}
  • 作用:通过基类构造函数传递父对象指针,确保委托与视图控件的生命周期绑定。

二、paint() 方法

核心功能
负责绘制居中显示的复选框,并根据模型数据状态(选中/未选中)更新样式。
关键步骤解析

  1. 检查可勾选性
    通过 index.flags() & Qt::ItemIsUserCheckable 判断当前项是否支持勾选,避免对非勾选项误操作。

  2. 准备绘制参数

    • 样式选项初始化:创建 QStyleOptionButton 对象,继承视图的基础状态(如控件是否启用)。
    • 状态设置:根据模型的 Qt::CheckStateRole 数据设置 QStyle::State_On(选中)或 QStyle::State_Off(未选中)标志。
  3. 计算居中位置

    QRect checkRect = option.widget->style()->subElementRect(QStyle::SE_CheckBoxIndicator, &checkOption, option.widget
    );
    checkRect.moveCenter(option.rect.center());
    
    • 子元素矩形获取:通过 QStyle::SE_CheckBoxIndicator 获取默认复选框指示器的尺寸(如 16x16)。
    • 中心对齐:将矩形中心对齐到单元格中心,确保复选框居中。
  4. 绘制复选框
    调用 QStyle::drawPrimitive() 方法,使用当前控件的样式(如 Fusion、Windows 等)绘制复选框。


三、editorEvent() 方法

核心功能
处理鼠标点击事件,实现复选框状态的切换与模型数据更新。
关键步骤解析

  1. 事件类型过滤
    仅处理 QEvent::MouseButtonRelease 事件,确保在鼠标释放时触发状态切换。

  2. 点击区域计算

    QRect checkRect = option.widget->style()->subElementRect(QStyle::SE_CheckBoxIndicator, &checkOption, option.widget
    );
    checkRect.moveCenter(option.rect.center());
    
    • 与绘制逻辑一致:使用相同的子元素矩形计算方法,确保点击区域与绘制区域完全匹配。
  3. 状态切换与模型更新

    • 获取当前状态:从模型数据中读取 Qt::CheckStateRole 的值。
    • 状态取反:切换选中(Qt::Checked)与未选中(Qt::Unchecked)状态。
    • 更新模型:通过 model->setData() 修改数据,触发视图刷新。

四、关键设计要点

  1. 样式一致性
    使用 QStyle 绘制复选框,确保与当前系统或应用程序主题兼容。

  2. 交互精准性
    通过计算点击区域与绘制区域的一致性,避免误触或点击无效的问题。

  3. 性能优化

    • 避免重复计算:仅在需要时处理勾选项的绘制和事件。
    • 模型-视图分离:通过 setData() 更新模型,符合 Qt 的模型/视图架构。

五、扩展应用场景

  1. 三态复选框
    可扩展支持 Qt::PartiallyChecked 状态,用于树形表格的父子节点联动。

  2. 动态样式调整
    结合 QSS 修改复选框颜色、尺寸,或通过重写 sizeHint() 调整单元格大小。

  3. 键盘事件支持
    editorEvent() 中处理 QEvent::KeyPress,支持空格键切换复选框状态。


六、代码示例(补充)

// 在 QTableView 中应用委托
QTableView *tableView = new QTableView();
CheckBoxDelegate *delegate = new CheckBoxDelegate(tableView );
tableView->setItemDelegate(delegate);  // 对所有列生效

或者

// 在 QTableView 中应用委托
QTableView *tableView = new QTableView();
CheckBoxDelegate *delegate = new CheckBoxDelegate(tableView );
tableView->setItemDelegateForColumn(0, delegate);  // 对第 0 列生效

文章转载自:

http://E26vz45E.mLcwL.cn
http://h7LyduQs.mLcwL.cn
http://I7XJKVbD.mLcwL.cn
http://l54IRT1U.mLcwL.cn
http://tZdVLHgM.mLcwL.cn
http://sWOWu1Qy.mLcwL.cn
http://wMTe9bee.mLcwL.cn
http://ZBkg0ZT2.mLcwL.cn
http://6PJR3ToR.mLcwL.cn
http://LIgogoYW.mLcwL.cn
http://MMMjwjfG.mLcwL.cn
http://pD7aC13R.mLcwL.cn
http://0H0C4ZYm.mLcwL.cn
http://xTpJYewU.mLcwL.cn
http://PHPUakHP.mLcwL.cn
http://3wqop4IV.mLcwL.cn
http://RP63DiMM.mLcwL.cn
http://nKGYWeWV.mLcwL.cn
http://2MVTtWdU.mLcwL.cn
http://uGWgSDOx.mLcwL.cn
http://2NLdyb3R.mLcwL.cn
http://OyKuuB7z.mLcwL.cn
http://IXXM3LWS.mLcwL.cn
http://qA6uHkU0.mLcwL.cn
http://BgunusBC.mLcwL.cn
http://wpbbXAKh.mLcwL.cn
http://PbeslHB7.mLcwL.cn
http://w3eWUYAA.mLcwL.cn
http://kFZu61Ao.mLcwL.cn
http://1Iuwk5G1.mLcwL.cn
http://www.dtcms.com/wzjs/690483.html

相关文章:

  • 凡客网站建站教程wordpress 数据交互
  • 网站建设开发岗位职责市场营销十大经典案例
  • 如何建设类似大众点评网站设计师之家数字图书馆
  • 公司网站怎么建站网站备案需要拍照
  • 做网站一年的维护费用是多少北京做手机网站
  • 深圳网站建设制作营销网站301和302
  • 网站地图什么格式上海徐汇网站建设公司
  • 企业做网站都需要准备哪些材料网站建设教程免费
  • 企业网站建设最新技术网站icp备案证明
  • 中国建设招标网是权威网站吗广州网络营销公司推荐
  • 免费网站建设哪个好 - 百度ps做网站字号大小
  • 昌平网站制作开发公司网站建设与维护合同范本
  • 重庆万州网站建设哪家好网站编辑器
  • 网站招标书怎么做seo积分优化
  • WordPress 弹出二维码常德外贸网站优化推广
  • 学校网站的系统建设方式阿里巴巴官网下载
  • nas 建网站大连百度推广公司
  • 甘肃省安装建设集团公司网站php网站建设填空题
  • 微网站成功案例wordpress阿里图标库
  • 榆林网站建设推广简易个人博客网站源码
  • wordpress怎么ftp建站武进网站建设公司
  • 怎么做网站促收录常熟滨江开发区人才网
  • 呼和浩特网站建设设计如东网站建设公司
  • 通辽网站建设招聘网站不关站备案
  • 网站改版业务北京电商网站开发公司
  • 企业网站用免费程序长安公司网站制作
  • 沈阳网站排名seo亚洲最新永久在线观看
  • 教育网站赏析旅游网站毕业设计和论文
  • 哪里有免费的网站推广软件啊想代理个网站建设平台
  • 江西萍乡做网站公司临沂网络建设