Jor*_*e C 5 c++ qt qtablewidget
我知道如何将文本标签设置到行或列标题中。但我想做这样的事情:
https://i.stack.imgur.com/eMM6U.jpg
我没有找到任何有关如何在红色圆圈内进行操作的信息。我开始相信这不能用 QTableWidget 来完成。
谢谢 ;)
我认为标准标题(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)
该代码显示了主要思想,它不是最终版本,但您应该自己完成所有这些具体的事情。当然这种方法不是很容易,你可以只创建图片并将其设置到单元格中,但在这种情况下图片将无法很好地扩展。如果用户调整某些标题的大小,我的代码可以正常工作。为了证明这一点,请查看不同尺寸的屏幕截图。

