• 10071阅读
  • 4回复

怎么给sql的每个数据线添加一个check box [复制链接]

上一主题 下一主题
离线succulent
 
只看楼主 倒序阅读 楼主  发表于: 2008-11-17
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
把sql的数据导入到tableview中显示,想给每个数据项添加一个checkbox,就是用打钩来选择数据项
请问怎么实现比较合适呢,尤其是该怎么排列,把checkbox给排列到tableview里面,能实现吗??或者只能排在旁边?
sql比如有10行数据,能够只显示10个checkbox吗??也就是说checkbox的个数能随着sql的数据个数而变化吗
离线cunyoulu
只看该作者 1楼 发表于: 2008-11-17
QTableWidget与QTableView的区别(Qt这个地方弄的很乱。)
QTableWidget继承自QTableView。QSqlTableModel能与QTableView绑定,但不能于QTableWidget绑定。
QSqlTableModel *model = new QSqlTableModel;
model->setTable("employee");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
model->removeColumn(0); // don't show the ID
model->setHeaderData(0, Qt::Horizontal, tr("Name"));
model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

QTableView *view = new QTableView;
view->setModel(model);
view->show();
模型视图结构
Qt4中引入了模型/视图框架来完成数据与表现的分离,这在Qt4中称为InterView框架。

MVC设计模式是起源于Smalltalk的一种与用户界面相关的设计模式。MVC包括三个元素:模型(Model)表示数据,视图(View)是用户界面,控制(Controler)定义了用户在界面上的操作。通过使用MVC模式,有效的分离了数据和用户界面,使得设计更为灵活,更能适应变化。
模型:所有的模型都基于QAbstractItemModel类,该类是抽象基类。
视图:所有的视图都从抽象基类QAbstractItemView继承。

Interview框架提供了一些常见的模型类和视图类,例如QStandardItemModel,QDirModel,QStringListModel和QColumnView,QHeaderView,QListView,QTableView,QTreeView。

相对于使用现有的模型和视图,Qt还提供了更为便捷的类来处理常见的一些数据模型。他们将模型和视图合一,便于处理一些常规的数据类型。使用这些类型虽然简单方便,但也失去了模型视图结构的灵活性,所以要根据具体情况来选择。


具体区别表格
区别点
QTableView
QTableWidget
继承关系

QTableWidget继承自QTableView
使用数据模型setModel
可以使用setModel设置数据模型
setModel是私有函数,不难使用该函数设置数据模型
显示复选框setCheckState
没有函数实现复选框
QTableWidgetItem类中的setCheckState(Qt::Checked);可以设置复选框
与QSqlTableModel绑定
QTableView能与QSqlTableModel绑定
QTableWidget能与QSqlTableModel绑定






View与Model绑定注意事项
但视图与模型绑定时,模型必须使用new来创建。否则视图不能随着模型的改变而改变。
Eorror错误的写法
QStandardItemModel model(4,2);


model.setHeaderData(0, Qt::Horizontal, tr("Label"));
model.setHeaderData(1, Qt::Horizontal, tr("Quantity"));


ui.tableView->setModel(&model);

for (int row = 0; row < 4; ++row) {
    for (int column = 0; column < 2; ++column) {
        QModelIndex index = model.index(row, column, QModelIndex());
        model.setData(index, QVariant((row+1) * (column+1)));
    }
}


Right 正确的写法
QStandardItemModel *model;

model = new QStandardItemModel(4,2);
ui.tableView->setModel(model);

model->setHeaderData(0, Qt::Horizontal, tr("Label"));
model->setHeaderData(1, Qt::Horizontal, tr("Quantity"));

for (int row = 0; row < 4; ++row) {
    for (int column = 0; column < 2; ++column) {
        QModelIndex index = model->index(row, column, QModelIndex());
        model->setData(index, QVariant((row+1) * (column+1)));
    }
}



QTableWidget编程注意事项
ui.tbwWellData->setRowCount(88);
不要重复调用上面这个方法,否则会导致界面速度变慢。
村友录-让您的村落名扬天下http://www.cunyoulu.com
离线cunyoulu
只看该作者 2楼 发表于: 2008-11-17
本来有表格的,复制的比较乱。仔细看看,查查,希望有帮助。
村友录-让您的村落名扬天下http://www.cunyoulu.com
离线vrcats
只看该作者 3楼 发表于: 2008-11-17
你想要的这个东西叫item delegate,去看一下Qt的例子star delegate吧
离线succulent
只看该作者 4楼 发表于: 2008-11-17
太感谢了,给得太详细了,我好好看看!
快速回复
限100 字节
 
上一个 下一个