Qt 表小部件。如何同时设置垂直标题和水平标题的含义/标题?

Jor*_*e C 5 c++ qt qtablewidget

我知道如何将文本标签设置到行或列标题中。但我想做这样的事情:

https://i.stack.imgur.com/eMM6U.jpg

我没有找到任何有关如何在红色圆圈内进行操作的信息。我开始相信这不能用 QTableWidget 来完成。

谢谢 ;)

Che*_*byl 2

我认为标准标题(QHeaderView)是不可能的,因为

注意:每个标头都会呈现每个部分本身的数据,并且不依赖于委托。因此,调用 header 的 setItemDelegate() 函数将不起作用。

所以你需要忘记它并禁用它,你应该实现你自己的标题(设置你的颜色,你的文本等等),但我当然会帮助你理解含义/标题。我通过下一个项目代表实现了这一点:

。H:

#ifndef ITEMDELEGATEPAINT_H
#define ITEMDELEGATEPAINT_H

#include <QStyledItemDelegate>

class ItemDelegatePaint : public QStyledItemDelegate
{
    Q_OBJECT
public:
    explicit ItemDelegatePaint(QObject *parent = 0);
    ItemDelegatePaint(const QString &txt, QObject *parent = 0);


protected:
    void paint( QPainter *painter,
                const QStyleOptionViewItem &option,
                const QModelIndex &index ) const;
    QSize sizeHint( const QStyleOptionViewItem &option,
                    const QModelIndex &index ) const;
    QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    void setEditorData(QWidget * editor, const QModelIndex & index) const;
    void setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const;
    void updateEditorGeometry(QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const;

signals:

public slots:

};

#endif // ITEMDELEGATEPAINT_H
Run Code Online (Sandbox Code Playgroud)

但是所有这些方法在这里都没有多大用处,您可以通过一些具体操作自己实现,我将向您展示主要方法 - Paint()

void ItemDelegatePaint::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    if(index.row() == 0 && index.column() == 0)
    {
        QRect source1 = QRect(option.rect.topLeft(),option.rect.size()/2);
        QRect source2 = QRect(option.rect.topLeft(),option.rect.size()/2);

        painter->drawLine(option.rect.topLeft(),option.rect.bottomRight());

        source1.moveTopLeft(source1.topLeft() += QPoint(source1.size().width(),0));
        painter->drawText(source1,"agent reagent");

        source2.moveBottomLeft(source2.bottomLeft() += QPoint(0,source2.size().height()));
        painter->drawText(source2,"hallide ion");
    }

    else
    {
        QStyledItemDelegate::paint(painter,option,index);
    } 
}
Run Code Online (Sandbox Code Playgroud)

该代码显示了主要思想,它不是最终版本,但您应该自己完成所有这些具体的事情。当然这种方法不是很容易,你可以只创建图片并将其设置到单元格中,但在这种情况下图片将无法很好地扩展。如果用户调整某些标题的大小,我的代码可以正常工作。为了证明这一点,请查看不同尺寸的屏幕截图。

在此输入图像描述

在此输入图像描述