2010-03-07 47 views
22

我剛剛開始使用Qt編程,我試圖使用QTableView控件創建一個簡單的表格數據佈局,並使用自己創建的模型類繼承QAbstractTableModel。出於某種原因,我的表視圖最終看起來像這樣:QTableView在每個單元格中都有不需要的複選框

alt text http://users.nerdland.net/tyler/files/pics/qtableview_checkboxes.png

在什麼的挫折感是那些東西,看起來像複選框(但是當我點擊他們什麼都不做)的每一個細胞,並且我如何讓他們離開?除了對象名稱外,我沒有更改任何QTableView屬性。

如果它的事項,我的模型代碼是死的簡單:

MyTableModel::MyTableModel(QObject* parent) 
    : QAbstractTableModel(parent) 
{ 
} 

MyTableModel::~MyTableModel() 
{ 
} 

int MyTableModel::rowCount(const QModelIndex& parent) const 
{ 
    return 1000; 
} 

int MyTableModel::columnCount(const QModelIndex& parent) const 
{ 
    return 5; 
} 

QVariant MyTableModel::data(const QModelIndex& index, int role) const 
{ 
    return "Foo"; 
} 

對話框UI是建立在Qt Designer中,而類的對話框內我的模型重視這樣的觀點:

MyTableModel testModel = new MyTableModel(this); 
ui.testTable->setModel(testModel); 

除此之外,我不對ui.testTable進行任何操作。

使用Qt 4.6。

回答

47

嘗試改變MyTableModel::data()以下幾點:

QVariant MyTableModel::data(const QModelIndex& index, int role) const 
{ 
    if (role == Qt::DisplayRole) 
     return "foo"; 
    else 
     return QVariant(); 
}

可能返回的QVariant的作用Qt::CheckStateRole被誤解QTableView中。

+0

完美!謝謝。我想我不應該只是忽略我還沒有學習過的參數...... – 2010-03-07 16:33:49

+3

很高興幫助你:) Qt只是石頭! – Elrohir 2010-03-07 16:36:49

+2

你也幫了我! – 2011-05-12 23:00:42

2

您是否有機會將Qt::ItemIsUserCheckable標誌設置爲flags()

+1

不,即使我重寫'flags'來返回'QAbstractTableModel :: flags(index)&〜Qt :: ItemIsUserCheckable;',複選框仍然存在。 – 2010-03-07 16:16:56

相關問題