2017-07-27 52 views
0

也許我要問的是如此基本,我錯過了它的某個地方,但我谷歌的所有類型的東西,我一直沒能找到答案。我有以下表格視圖,來自SQLite表的數據源:QTableView格式個別行和列

body = new QSqlTableModel(parent,data->m_db); 
    body->setTable("C"+QString::number(markTime.toSecsSinceEpoch())); 
    body->select(); 
    ui->bodyView->setModel(body); 
    ui->bodyView->sortByColumn(0,Qt::AscendingOrder); 
    ui->bodyView->setColumnWidth(0,30); 
    ui->bodyView->setColumnWidth(1,80); 
    for(int x=2;x<ui->columns->maximum()+2;x++) ui->bodyView->setColumnWidth(x,40); 
    ui->bodyView->setEditTriggers(QAbstractItemView::NoEditTriggers); 
    ui->bodyView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
    ui->bodyView->setAlternatingRowColors(true); 
    ui->bodyView->show(); 

在程序中進一步向下添加數據到要顯示的表中。這沒有問題。我的問題是: 如何訪問各行來格式化行,我想更改字體的大小,格式化顯示以顯示數字對齊,並使其粗體顯示,但僅限特定行。 感謝您的幫助。

+0

你是什麼意思的行?,你可以解釋我請,你可以顯示你想要的圖像。 – eyllanesc

+0

當你說行時,你的意思是一列還是一行,或者是否有某個單元格? – eyllanesc

+0

對不起,我的意思是排,我只是更新了帖子。我想要的是例如使行6具有更大的字體,粗體和改變背景,以將用戶的眼睛驅動到該行。對於列或單元格也是如此。 – Dan3460

回答

0

Qt提出的定製個別視圖項目渲染(和編輯)細節的解決方案是通過delegates。定製的級別取決於你的用例:你可以做一些小的調整,比如改變字體,或者你可以繪製完全特殊的東西,比如Star Delegate的例子。

基本上有兩個選項以繼續進行自定義委託:要麼你繼承QStyledItemDelegate(或基類QItemDelegate如果你需要畫Qt的數據類型有些特殊的項目),並改變一些感興趣的特定細節給你留下休息到基類或您的子類QAbstractItemDelegate以完全控制查看項目的外觀和行爲。

委託可以設置爲在任一的三種不同的方式的觀點:通過setItemDelegate方法

  • 經由setItemDelegateForColumn方法

    1. 整個視圖(即,對於所有模型項)爲特定列通過setItemDelegateForRow方法

    例如着想

  • 特定行,這裏是您可以指定一個稍大物品渲染的字體大小:

    class CustomDelegate: public QStyledItemDelegate 
    { 
    public: 
        virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, 
             const QModelIndex &index) const Q_DECL_OVERRIDE; 
    }; 
    
    void CustomDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, 
             const QModelIndex &index) const 
    { 
        if (!index.isValid()) { 
         return; 
        } 
    
        QFont font = option.font; 
        font.setPointSize(font.pointSize() + 1); 
    
        QStyleOptionViewItem localOption(option); 
        localOption.font = font; 
        QStyledItemDelegate::paint(painter, localOption, index); 
    } 
    
  • +0

    謝謝德米特里,我想我明白了。我會嘗試看看。 – Dan3460

    +0

    經過測試,這完全是我想要的。謝謝。 – Dan3460

    +0

    不客氣。如果您發現答案有用,請將其標記爲已接受的答案,謝謝。 – Dmitry