2011-06-15 18 views
9

Çok basit olması gereken bir şey yapmaya çalışıyorum, ama daha çok baktığımda bir Qt hatası olup olmadığını merak ediyorum.Gizli bir QTableView Sütunu Gösterme

Yani, kullanıcı istediği gibi/gösterilen gizli olabilir sütunları olan bir QTableView var. Tabloyu başlattıktan sonra, kullanıcının GUI açık olduğunda son kullanıcının gizlediği sütunları gizleyen (QTableView::hideColumn() kullanarak) özel bir restoreColumns() yöntemini çağırıyorum. kullanıcı kullanıcı tarafından GUI koştu son kez gizlenmişti sütunları göstermek çalıştığında

sorun daha sonra gelir. Uygun sinyal/yuva arandığından ve bir sebepten geçiyor ancak bir sebepten dolayı QTableView sütunu görüntülemek için güncellenmiyor. garip Ne

zaten (kullanıcı tarafından GUI ran son defa gizli değildi) görüntülenir herhangi bir sütun/gizli gösterilen alma ile herhangi bir sorun olmasıdır.

Herhangi bir düşünce? Teşekkürler!/Sütunlardan biri gizlemek Aşağıda

for (int i=0; i<horizontalHeader()->count(); i++) { 
    // load size to restore previous width 
    ... 
    horizontalHeader()->resizeSection(i, width); // restore width 

    // load previous column position 
    ... 
    // restore column order 
    int currentVisualIndex = horizontalHeader()->visualIndex(i); 

    if (currentVisualIndex != visualIndex) 
     horizontalHeader()->moveSection(currentVisualIndex, visualIndex); 

    // load previous hidden/shown state 
    ... 
    if (columnHidden) { 
     hideColumn(i); 
    } else { 
     showColumn(i); 
    } 
} 

göstermek için örnek kod: Masayı başlatmak nasıl İşte


yöntem restoreColumns ait

m_tableModel = new mytablemodel(); 
m_tableView = new mytableview(); 
m_tableView->setItemDelegate(m_tableDelegate); 
m_tableView->setModel(m_tableModel); 

Et (...) var . QTableView ait QHeaderView Menü ve İçerik Menüsünden ulaşılabilir bir QAction bağlanır

void mytableview::showAColumn(bool checked) { 
    // mytableview is a subclass of qtableview 
    if (checked) 
     showColumn(COLUMN_A); // COLUMN_A is an enum for the column 
    else 
     hideColumn(COLUMN_A); 
} 

.

connect(action, SIGNAL(toggled(bool)), this, SLOT(showAColumn(bool))); 
+0

"showColumn()" ifadesinden sonra bir ['resizeColumnToContents'] (http://doc.qt.nokia.com/latest/qtableview.html#resizeColumnToContents) çağrısı yapmayı deneyebilir misiniz? (Sanırım "saklan" çok erken oluyor, sütun geçersiz bir boyuta sahip olabilir) – Mat

+0

Denedim - değişiklik yok. Tablo görünümü ekrana boyanmadan önce hideColumn'un nasıl geldiği ile ilgili bir şey olduğunu düşünüyorum ... tablo görünümünden sonra çizildikten sonra restoreColumns() yöntemini çağırmayla ilgili nasıl gideceğime gerçekten emin değilim. – Daren

+0

Biraz daha restoreColumns() yöntemine daha fazla ayrıntı ekledim. Sütunu yeniden boyutlandırmakta olduğum şeyler gibi görünüyor. O bölümü açıkladığımda beklediğim gibi çalıştı. Ancak, daha sonra önceki sütun genişliğini geri yükleme yeteneğini kaybettim ... – Daren

cevap

5

gizli sütunların önceki genişliğini yüklüyorsunuz, sütun boyutlandırma zaman, genişlik 0'dan büyük
bunu yapın olduğundan emin olmak 0.
edildi saklandı ve genişliği daha sonra sütunlar beklendiği gibi görünecek/gizlenecektir.

+0

Bu, Qt 'QTableView :: hideColumn()' açıklamasında belgelenmelidir. – phyatt

İlgili konular