我可以考慮幾種做你需要的方法;都將包括繪製自定義網格,因爲它看起來像沒有直接的方式掛鉤到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