2016-03-22 20 views
2

QTableView nesnesini yatay başlıklı Görünüme sahip ol, (dikey olarak gizledim). qtableView'den ızgarayı kaldırmak için setShowGrid (false) ayarlıyorum, ancak QTableView ve yatay üstbilgisi arasındaki ayırıcı kenarlıklarını nasıl kaldırabilirim. Denedim:QHeaderView'dan yatay kenarlıklar nasıl kaldırılır

tableView->horizontalHeader()->setFrameShape(QFrame::VLine) 

ancak başarılı olamadı. Teşekkür ederiz

cevap

2

Tamam ben paintSection yöntemini reimplemented ve şimdi ben/

void MyHeaderView::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const 
{ 
    QString data = model() -> headerData(logicalIndex, orientation(), Qt::DisplayRole).toString(); 

    QFontMetrics fm = painter -> fontMetrics(); 

    painter -> fillRect(rect, QBrush(QColor("white"))); 
    painter -> drawText(rect, Qt::AlignLeft, data); 

    painter -> drawLine(rect.topRight(), rect.bottomRight()); 
} 
1

Benim yaptığım gibi aynı "kenarlık" demek, geçerli stilin bir parçası. Bundan kurtulmak istiyorsanız, stil sayfalarını kullanarak özel stilinizi tanımlamanız gerekir.

QString style = R"(QHeaderView::section { 
         border: 1px solid black; 
         border-bottom: 0px;    
        } 
       )"; 

tableView->horizontalHeader()->setStyleSheet(style); 

Bu stil sayfası 1px genişliği siyah çizgi için başlık bölümünde genel bir sınır belirler ve alt sınır gizler: Burada

bir örnektir.

Not: Burada C++ 11 işlenmemiş dize kaynağı kullanıyorum, bu yüzden kafanız karışmayın. Bu sadece bir ip.

+0

, Cevabınız için teşekkür ederiz istediklerine sahipler Ama bir sorun vardır, ben nasıl bilmiyorum, setStyleSheet() yöntemini kullanamaz css olmadan C++ komutları ile aynı şeyi yapın? – tokafr

+0

Maalesef, Qt API'sinde üstbilginin alt kenarlığını kapatmak için hiçbir yöntem yoktur. Stil sayfalarını kullanamıyorsanız başka bir seçenek vardır: QHeaderView :: paintSection() yöntemini yeniden oluşturun. – Tomas