我知道如何将文本标签设置为行或列标题。但是我想做这样的事情:
http://i.stack.imgur.com/eMM6U.jpg
我没有找到有关如何在红色周围进行操作的任何信息。我开始相信QTableWidget无法做到这一点。
谢谢 ;)
我认为使用标准标头(QHeaderView)是不可能的,因为:
注意:每个标头都会为每个部分本身呈现数据,并且不依赖委托。结果,调用标头的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
但是所有这些方法在这里不是很有用,您可以通过一些特定的操作自己实现它,我将向您展示主要方法-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);
}
}
这段代码显示了主要思想,它不是最终版本,但是您应该自己完成所有这些具体操作。当然,这种方法不是很容易,您可以仅创建图片并将其设置为单元格,但是在这种情况下,图片将无法很好地扩展。如果用户将调整某些标头的大小,我的代码将正常工作。为了证明这一点,请参见不同大小的屏幕截图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句