2015-12-24 31 views
0

我在應用程序中的QTableView寬度QAbstractTableModel,我想使每列不同的寬度,以調整選項ui->tableView->horizontalHeader()->setSectionResizeMode (QHeaderView::Stretch);QTableView中具有不同的列寬

在我的模型我做的:

class rangeModel : public QAbstractTableModel { 
    //other code ....... 

    QVariant rangeModel::headerData(int section, Qt::Orientation orientation, int role) const 
    { 
     if (orientation != Qt::Horizontal) 
      return QVariant(); 
     if (role != Qt::DisplayRole && role != Qt::SizeHintRole) 
      return QVariant(); 
     if(role == Qt::SizeHintRole) 
     { 
      switch (section) { 
       case 0: return QSize(58, 20); 
       case 1: return QSize(58, 20); 
       case 2: return QSize(58, 20); 
       case 3: return QSize(228, 20); 
      } 
     } 
     switch (section) { 
      case 0: return "PREFIXMIN"; 
      case 1: return "PREFIXMAX"; 
      case 2: return "VALUE"; 
      case 3: return "PROGRESS BAR"; 
      default: return QVariant(); 
     } 
    } 

所以我希望我的行的大小不同,但不會發生,視圖由於某種原因忽略QSizeHint,即使沒有QHeaderView::Stretch選項,它也不起作用。如何使列和標題大小不同?

+0

我懷疑,你可以用QTableView做到這一點,但你可以寫你自己的看法。你可以通過繼承qabstractitemview – sanjay

+0

@sanjay編寫自己的視圖,所以我需要繼承qabstractitemview並重新實現'QAbstractItemView :: sizeHintForColumn(int column)const'並返回我想要的大小?或者這還不夠,我將需要重新實現'resizeEvent(QResizeEvent * event)'? – Vladislav

回答

1

你可能想用這個:

ui->tableView->resizeColumnsToContents();//resize all the columns based on longest data in every column. 

但是,如果你真的應該與你在你的代碼中使用的寬度值正好調整它們的大小:

ui->tableView->horizontalHeader()->setSectionResizeMode (QHeaderView::Stretch); 
ui->tableView->setColumnWidth(0,58); 
ui->tableView->setColumnWidth(1,58); 
ui->tableView->setColumnWidth(2,58); 
ui->tableView->setColumnWidth(3,228); 
+0

你能否解釋你的答案如何解決問題中的問題?僅有代碼的答案並不是很有用,特別是對於那些偶然發現這篇文章的讀者。謝謝! – Cristik

+0

對不起。我假定,那一行代碼是自我解釋的。但我做的另一個錯誤是,我認爲他只是計算了自己需要的寬度以適合列中的所有數據,這就是爲什麼我建議使用'resizeColumnsToContents()'的原因。無論如何,我現在編輯我的答案,幷包括'setColumnWidth()'incase他真的想要設置這些特定的寬度。我從來沒有想到他從未嘗試過'setColumnWidth()'函數。 –

+0

不幸的是,設置列寬僅適用於事先知道列數的情況。 resizeColumnsToContents()函數非常慢。如果列可以動態添加(這是QAbstractTableModel的主要目的之一),那麼您必須對QTableView進行子類化或找到另一種替代方法。 – Ph0t0n