标签: qheaderview

如何将数据头添加到Qt中的QTableWidget?

我还在学习Qt,我非常感谢SO社区为我提供了很好的,非常及时的Qt问题答案.谢谢.

我对在标题中添加标题的想法感到很困惑QTableWidget.我想做的是有一个包含团队成员信息的表.每个row成员都应该包含他的名字和姓氏,每个名字都在自己的单元格中,一个单元格中有一个电子邮件地址,另一个单元格中有办公室.我将header在这些列上方添加适当的名称.

我试图轻松开始,只需要标题显示"Last"(如姓氏).这是我的代码.

int column = m_ui->teamTableWidget->columnCount();
m_ui->teamTableWidget->setColumnCount(column+1);
QString* qq = new QString("Last");
m_ui->teamTableWidget->horizontalHeader()->model()->setHeaderData(0, 
Qt::Horizontal, QVariant(QVariant::String, &qq));
Run Code Online (Sandbox Code Playgroud)

我的表被正确呈现,但标题不包含我期望的内容.它包含1个包含文本"1"的单元格.

我显然在做一些非常愚蠢的事情,这是错误的,但我迷失了.我一直在倾注文件,一无所获.

感谢您的帮助.

c++ qt qtgui qtablewidget qheaderview

3
推荐指数
2
解决办法
2万
查看次数

如何使用委托在QHeaderView部分绘制像素图?

问题:我需要将小像素图绘制QHeaderView到此图中所示的部分(像素图位于该部分的右角,标有红色方块):

在此输入图像描述

据我了解,有两种方法可以做到:

  1. 重新实施QHeaderViewpaintSection()方法.

  2. QStyledItemDelegate类创建委托并重新实现paint()方法.

如果我使用下面的代码尝试(1)变体,则根本不显示过滤器像素图:

void DecorativeHeaderView::paintSection( QPainter* painter, const QRect& rect, int logicalIndex ) const
{
     if( !rect.isValid() )
     {
          return;
     }

     // get the state of the section
     QStyleOptionHeader option;
     initStyleOption( &option );

     // setup the style options structure
     option.rect = rect;
     option.section = logicalIndex;
     option.iconAlignment = Qt::AlignVCenter | Qt::AlignHCenter;

     QVariant variant = model()->headerData( logicalIndex, orientation(), Qt::DecorationRole );
     option.icon = qvariant_cast< QIcon >( variant ); …
Run Code Online (Sandbox Code Playgroud)

qt delegates qt4 qheaderview

3
推荐指数
1
解决办法
4699
查看次数

QHeaderView :: paintSection做了什么,以至于忽略了之前或之后我对画家所做的一切

这个问题是这篇文章的进一步发展,并且有所不同,尽管可能看起来与类似.

我正在尝试重新实现QHeaderView::paintSection,以便从模型返回的背景将得到尊重.我试着这样做

void Header::paintSection(QPainter * painter, const QRect & rect, int logicalIndex) const
{
    QVariant bg = model()->headerData(logicalIndex, Qt::Horizontal, Qt::BackgroundRole);
    // try before
    if(bg.isValid())                // workaround for Qt bug https://bugreports.qt.io/browse/QTBUG-46216
        painter->fillRect(rect, bg.value<QBrush>());             
    QHeaderView::paintSection(painter, rect, logicalIndex);
    // try after
    if(bg.isValid())                // workaround for Qt bug https://bugreports.qt.io/browse/QTBUG-46216
        painter->fillRect(rect, bg.value<QBrush>());             
}
Run Code Online (Sandbox Code Playgroud)

然而,它没有用 - 如果我QHeaderView::paintSection打电话,我画画的任何东西都是可见的(我也尝试画一条对角线).如果我删除了QHeaderView::paintSection呼叫,则可以看到线路和背景.在fillRect之前和之后进行通话QHeaderView::paintSection没有任何区别.

我想知道,是什么QHeaderView::paintSection让我无法在它上面画出一些东西.是否有办法克服它而不重新实现每一个什么QHeaderView::paintSection呢?

我需要做的就是为某个单元添加一定的阴影 - 我仍然希望单元格中的所有内容(文本,图标,渐变背景等)都可以像现在一样进行绘制......

c++ qt qpainter qheaderview

3
推荐指数
1
解决办法
2014
查看次数

如何使 QheaderView 多级?

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

我创建了以Qt,类型的模型QStandardItemModel,我想与显示QtableView

QtableView向我显示左侧的线路电平。如果可能,我想删除它或隐藏它。

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

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

在此处输入图片说明

c++ qt qt4 qheaderview qt5

3
推荐指数
1
解决办法
2343
查看次数

QHeaderView:根据列的内容大小进行 Stretch 或 ResizeToContents

我有一个 QTableWidget,最后一列包含可变长度的文本。

我想根据该部分的大小将 QHeaderView 的最后一部分拉伸或调整为其内容的大小。如果内容大小不超过小部件中的剩余空间,我想拉伸它(以防止小部件中出现丑陋、未填充的空间)。我可以通过使用setStretchLastSection(True). 但是,如果内容大小超过拉伸的列,则内容的最后部分将被剪切,因为该列未调整大小。QHeaderViewResizeToContents为这种情况提供了ResizeMode,但在内容较短的情况下,这会使小部件具有未填充的空间。

我想过手动调整列大小。不幸的是,由于sectionSizeFromContents()受保护,我无法直接访问内容大小。我想我可以继承 QHeaderView 并重新实现它,但我想知道是否有更好的解决方案。

qt pyqt qheaderview qt5 pyqt5

3
推荐指数
1
解决办法
3385
查看次数

使用自定义 HeaderView 时列排序不起作用

我正在尝试创建一个TableView具有排序功能的。如果我将TableViewobj 设置为我的自定义HeaderView,则单击标题将不会排序,即使我的自定义HeaderView没有重新实现任何内容。如果我使用 的TableViewheader ( hh=tv.horizontalHeader()) 来代替,它就会排序。我究竟做错了什么?

代码如下:

import sys
import operator
from PyQt5 import QtWidgets
from PyQt5.QtCore import QAbstractTableModel, Qt, QVariant

class TableModel(QAbstractTableModel):
    def __init__(self, parent, datain, headerdata):
        super(TableModel,self).__init__(parent)

        self.arraydata=datain
        self.headerdata=headerdata

    def rowCount(self,p):
        return len(self.arraydata)

    def columnCount(self,p):
        if len(self.arraydata)>0:
            return len(self.arraydata[0])
        return 0

    def data(self, index, role):
        if not index.isValid():
            return QVariant()
        elif role != Qt.DisplayRole:
            return QVariant()
        return QVariant(self.arraydata[index.row()][index.column()])

    def headerData(self, col, orientation, role):
        if orientation==Qt.Horizontal and role==Qt.DisplayRole: …
Run Code Online (Sandbox Code Playgroud)

python pyqt qtableview qheaderview pyqt5

3
推荐指数
1
解决办法
1248
查看次数

右键单击QTreeView内的QHeaderView

我已经编写了多列QTreeView的后代。我想创建一个弹出菜单,当用户右键单击列标题时出现。我已经尝试从QTreeView捕获信号,但是QTreeView似乎没有在标头上发出信号。QTreeView.header()可以。因此,我相信我必须执行以下任一操作:
1:将QHeaderView的信号之一连接到弹出功能-我一直无法找到单击一次右键即可触发的信号-我尝试了sectionClicked,sectionHandleDoubleClicked,sectionDoubleClicked,sectionPressed(双击功能未捕获到单个右键单击,但确实捕获了双击右键)

self.header().sectionClicked.connect(self.headerMenu)
self.header().sectionHandleDoubleClicked.connect(self.headerMenu)
self.header().sectionDoubleClicked.connect(self.headerMenu)
self.header().sectionPressed.connect(self.headerMenu)
Run Code Online (Sandbox Code Playgroud)

或者,
2:使用我自己的MousePressEvent函数编写QHeaderView的后代,并将其用作我的标题。到目前为止,在将新的标头类连接到QTreeView后代方面,我一直没有成功。我在运行时不断遇到Segmentation Fault,没有更多解释。

#in DiceView's init, where DiceHeaders is the QHeaderView descendant
self.setHeader(DiceHeaders())
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

python qt pyqt qtreeview qheaderview

2
推荐指数
1
解决办法
3694
查看次数

为什么我的自定义QHeaderView不允许排序

我实现了从QHeaderView扩展的我自己的QHeaderView。

在使用此视图的QTableWidget上启用排序功能后,仍然无法排序。出于生气,该表最初按第一列排序。如果未将水平标题设置为自定义类,则会执行排序。

唯一的重载方法是构造函数(强制水平使用)和sizeHint()。

sorting qt qheaderview

1
推荐指数
1
解决办法
886
查看次数

如何在QHeaderView类派生的文本中绘制文本

我需要从QHeaderView类派生的文本中绘制文本.但是这段代码不起作用.

void HeaderView::paintSection(QPainter *painter, const QRect &, int) const
{
    painter->drawText(0, 0, "abcde");
}
Run Code Online (Sandbox Code Playgroud)

qt paint qheaderview

1
推荐指数
1
解决办法
349
查看次数

添加自定义小部件作为 QTableWidget Horizo​​ntalHeader

QWidget是否可以在 上显示自定义字符串而QHeaderView不仅仅是通用字符串?

另外,是否可以改变唯一的高度horizontalHeaderItem?当我这样做时它崩溃了:

(ui->myTable->horizontalHeaderItem(0))->setSizeHint(QSize(200,300));
Run Code Online (Sandbox Code Playgroud)

c++ qt qtablewidget qheaderview qt5

1
推荐指数
1
解决办法
4564
查看次数

QTreeView具有固定的列宽

今天,我正在尝试配置a QTreeView以使其符合我的要求。我的观点基本上有三列。无论列大小如何,第二和第三列的宽度应恰好为50像素。第一列应占据剩余空间。

如果放大窗口小部件,则第一列应自动占据所需的可用空间,而第二列和第三列应保留其给定的50像素宽度。

这是我到目前为止尝试过的:

main.cpp

#include <QApplication>
#include <QTreeView>
#include <QDebug>
#include <QStandardItemModel>
#include <QHeaderView>
#include "ColumnDelegate.h"

int main(int argc, char** args) {
    QApplication app(argc, args);
    auto widget = new QTreeView;
    auto model = new QStandardItemModel;
    model->insertRow(0, { new QStandardItem{ "Variable width" }, new QStandardItem{ "Fixed width 1" }, new QStandardItem{ "Fixed width 2" } });
    model->insertRow(0, { new QStandardItem{ "Variable width" }, new QStandardItem{ "Fixed width 1" }, new QStandardItem{ "Fixed width 2" } });
    widget->setModel(model);
    widget->setItemDelegateForColumn(1, new …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtreeview qheaderview qstyleditemdelegate

1
推荐指数
1
解决办法
1507
查看次数

获取 QHeaderView 中的标题部分文本

我在 QTableWidget 中对 QHeaderView 进行子类化,以提供隐藏/显示部分的自定义功能。有没有办法从标题视图中获取部分的文本?我知道我可以在表格范围内做到这一点,但这不是我想要做的。

我意识到数据存储在模型内部,但是以下测试仅返回“无”:

self.model().index(0,0).data()
Run Code Online (Sandbox Code Playgroud)

python pyqt qheaderview

1
推荐指数
1
解决办法
1517
查看次数