【问题标题】:How to make a QheaderView multilevel?如何制作 QheaderView 多级?
【发布时间】:2018-03-10 05:33:00
【问题描述】:

我正在创建一个保存对象发送服务数据的应用程序。

我用Qt 创建了它,这是一个QStandardItemModel 类型的模型,我想用QtableView 显示它。

但是QtableView 向我显示了左侧的行级别。如果可能,我想删除或隐藏它。

我也有一个标题的问题,我想将其水平分成两部分,然后将底部的相应部分垂直分成两部分。这些划分的原因是我有两个开头相似的标题(通信日期和通信编号)

感谢您的回复,因为这对我来说真的很重要。

【问题讨论】:

  • 隐藏行号的方法如下:myTableView->verticalHeader()->hide(); 但问题的第二部分要困难得多。我认为唯一可行的方法是继承QHeaderView 并实现渲染两个相邻列标题的上部,因为它们是一个单列标题。
  • 至于我的第一个问题,你的答案很完美,但第二个问题对我来说有点模糊,我想我会用视觉更好地理解我也会发布我的(如果我找到方法),因为我认为我选择的布局按此顺序是合乎逻辑的,但我愿意接受所有建议,谢谢。
  • @eyllanesc 它必须看起来像i.imgur.com/ITXNWNc.jpg

标签: c++ qt qt4 qt5 qheaderview


【解决方案1】:

这种QHeaderView不存在,但是我们可以创建它,我们必须创建一个继承自QHeaderView的类,并主要重写方法paintSection,它是负责绘制截面的方法QHeaderView。

但是要为任何类型的视觉设计进行通用项目,我们必须保留每个部分的位置和大小信息,为此我们将创建一个模型,以了解为什么会被覆盖的类我建议您阅读内容以下link.

解释每个方法的逻辑很广泛所以只放置实现上述的项目的link并描述每个类的任务:

  • TableHeaderItem:负责保存每个item的信息,除了label之外主要是rowspan和columnspan。

  • GridTableHeaderModel:模型类提供对每个项目的访问,以便我们可以编辑和读取每个项目

  • GridTableHeaderView:这个类是自定义的QHeaderView,其中的主要方法被覆盖以获得所需的外观。

  • GridTableView(可选):是一个 TableView,它具有直接与 GridTableHeaderView 一起工作的方法。

输出:

注意:要隐藏垂直标题只需要使用hide()方法:

horizontalHeader()->hide();

【讨论】:

  • 非常感谢 eyllanesc 我试图编译你的代码源有一些错误我设法修复了一些由于文件未包含而导致的错误,我目前正在阅读你的源代码以尝试了解更多再次感谢您的方法
  • 你得到的截图结果正是我想要的。错误i.imgur.com/8DH1h1J.png 的截图
  • 我克隆了你的 Github 目录并再次尝试,但同样的问题仍然存在,这可能是由于我的 Qt 版本,如你所说。结果是我的终端上的 qmake--version 给了我:QMake version 2.01 A Using Qt version 4.8.7 in/usr/lib/i386-linux-gn
  • 第一个错误是:G++-C-pipe-O2-Wall-W-D_REENTRANT-DQT_DEPRECATED_WARNINGS-DQT_NO_DEBUG-DQT_GUI_LIB-DQT_CORE_LIB-DQT_SHARED-I/usr/share/qt4/Mkspecs/Linux -G ++-I.-I/usr/include/qt4/qtcore.pyd-I/usr/include/qt4/QtGui-I/usr/include/qt4-I.-O main.主 .cpp 在主 .cpp 中包含的文件中:1:0:Gridtableheaderview。 H:10:95: 错误: 'Q_NULLPTR' 没有在这个范围内声明 :: 方向指南, int rows, int columns, QWidget * parent = Q_NULLPTR; ^~~~~~~~~ Makefile:233:目标“main.O”的配方失败 Make:*** [Main.O” o] 错误 1
  • @eyllanesc 您将我的 quastion 标记为重复,但我问如何在 python 而不是 c++ 中做同样的事情。我不懂 C++ 代码。许多需要相同解决方案的人会通过请求使用“python”一词来搜索该问题。他们中的许多人也不懂 c++。请重新打开我的问题。 (stackoverflow.com/questions/62089638/…)
猜你喜欢
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多