2010-03-07 36 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

相关问题