我可以考虑几种做你需要的方法;都将包括绘制自定义网格,因为它看起来像没有直接的方式挂钩到QTableView类的网格绘制例程中:
1.通过调用setShowGrid(false)并绘制您的treeview网格的标准网格使用物品代理需要它们的单元格的网格线。下面是一个例子:
// custom item delegate to draw grid lines around cells
class CustomDelegate : public QStyledItemDelegate
{
public:
CustomDelegate(QTableView* tableView);
protected:
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
private:
QPen _gridPen;
};
CustomDelegate::CustomDelegate(QTableView* tableView)
{
// create grid pen
int gridHint = tableView->style()->styleHint(QStyle::SH_Table_GridLineColor, new QStyleOptionViewItemV4());
QColor gridColor = static_cast<QRgb>(gridHint);
_gridPen = QPen(gridColor, 0, tableView->gridStyle());
}
void CustomDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
QStyledItemDelegate::paint(painter, option, index);
QPen oldPen = painter->pen();
painter->setPen(_gridPen);
// paint vertical lines
painter->drawLine(option.rect.topRight(), option.rect.bottomRight());
// paint horizontal lines
if (index.column()!=1) //<-- check if column need horizontal grid lines
painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight());
painter->setPen(oldPen);
}
// set up for your tree view:
ui->tableView->setShowGrid(false);
ui->tableView->setItemDelegate(new CustomDelegate(ui->tableView));
2.创建一个QTableView中后代并重写paintEvent方法。在那里你可以绘制自己的网格或让基类绘制它,然后使用tableview的背景颜色在网格顶部绘制水平线。
希望这有助于,关心
我会给它一个重击。感谢您的建议。这将是棘手的。我可能会最终创建我自己的HexEdit小部件来隐藏这种混乱。不过,最终的结果应该不错。谢谢。 – 2010-04-27 03:47:50