2014-04-01 4 views
2

사용자가 몇 가지 기준을 고려하여 10 점을 입력 할 수있는 표를 만들기 위해 노력하고 있습니다. 내 SQLite 데이터베이스에 연결되어 있고 조건에 대한 설명을 보려면 왼쪽에있는 열을 검색하고, 오른쪽에있는 학년 (편집 가능한 열)을 입력 할 수있는 곳의 열을 검색합니다. 여기 내 코드 :표의 열을 편집 가능하게 만드는 방법은 무엇입니까?

QSqlQueryModel *model = new QSqlQueryModel(); 

QSqlQuery* qry = new QSqlQuery(conn.mydb); 

qry->prepare("select I.itemDescription, S.grade from Items I, ItemsToStudent S where  I.itemID = S.itemID and I.rubricID = ? and S.courseID = ? and S.studentID = ?"); 
qry->addBindValue(actid); 
qry->addBindValue(courseid); 
qry->addBindValue(studentid); 
qry->exec(); 
model->setQuery(*qry); 
ui->rubricTable->setModel(model); 

그러나 두 번째 열을 편집 할 수 없습니다. 이 일을 어떻게 성취 할 수 있습니까?

답변

0

QSqlQueryModel 클래스는 SQL 결과 세트에 대한 읽기 전용 데이터 모델을 제공합니다. 당신은 같은 QSqlRelationalTableModel를 사용할 수 있습니다 당신이 보여주고 싶지 않은 당신은 또한 열을 숨길 수 있습니다

QSqlRelationalTableModel *model = new QSqlRelationalTableModel(this,conn.mydb); 
model->setEditStrategy(QSqlTableModel::OnFieldChange); 
model->setJoinMode(QSqlRelationalTableModel::LeftJoin); 
model->setTable("Items"); 
model->setRelation(0, QSqlRelation("ItemsToStudent", "itemID", "grade")); 

model->setFilter(QString("rubricID = ? and courseID = ? and studentID = ?")); 
model->select(); 

model->setHeaderData(1, Qt::Horizontal, tr("Criteria")); 
model->setHeaderData(2, Qt::Horizontal, tr("Grade")); 

ui->rubricTable->setModel(model); 

같은 :

ui->rubricTable_tbl->hideColumn(3); 
+0

나는처럼 편집 할 수 원하지 않는 일부 필드가 있습니다 기준 열. 특정 열을 편집 할 수 없도록 만드는 방법은 무엇입니까? 또한 학년 열에 성적을 입력하려고하면 공백이 반환되고 입력 한 값은 데이터베이스에서 업데이트되지 않습니다. 업데이트를 위해 신호를 사용해야합니까, 아니면 자동으로 그렇게 할 것으로 예상되는 관계형 테이블 모델입니까? – sengakae

+0

좋아, 나는 인터넷 검색을 통해 나의 첫 번째 질문을 발견했다. 숫자 2를 찾으려고 할 것입니다. – sengakae

+0

사용자 정의 모델을 가지고 Qt :: ItemFlags QAbstractItemModel :: flags (const QModelIndex & index) const 메소드를 구현하고 Qt :: ItemIsEditable 플래그가 설정되지 않은 플래그 세트를 반환 할 수 있습니다 당신이 편집하고 싶지 않은 세포들. – Nejat

관련 문제