Нужно отфильтровать данные из таблицы по имени, хранящемуся в связанном справочнике. Т.е. в таблице храниться идентификатор dict_id, который разыменовывается в справочнике.
Ниже простой пример. Конечно же dict_id=1 работает и отфильтровывает строку с first element. А вот как выбрать по 'first element' не понятно.
CREATE TABLE TestDict (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" varchar(20) NOT NULL
);
CREATE TABLE TestTable (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"dict_id" integer NOT NULL,
"value" real NOT NULL,
FOREIGN KEY("dict_id") REFERENCES TestDict
);
INSERT INTO TestDict ("name") VALUES ("first element");
INSERT INTO TestDict ("name") VALUES ("second element");
INSERT INTO TestTable ("dict_id","value") VALUES ("1","22");
INSERT INTO TestTable ("dict_id","value") VALUES ("2","32");
#include <QtGui>
#include <QtSql>
int main(int argc, char *argv[]){
QApplication app(argc,argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
if(!db.open()) {
qDebug() << "open error";
return 1;
}
QSqlRelationalTableModel model;
model.setTable("TestTable");
model.setRelation(model.fieldIndex("dict_id"), QSqlRelation("TestDict", "id", "name"));
//model.setFilter(tr("TestTable.dict_id=TestDict.id AND TestDict.name='first element'"));
model.setFilter("dict_id=1");
QTableView view;
view.setModel(&model);
view.setItemDelegate(new QSqlRelationalDelegate(&view));
view.show();
model.select();
return app.exec();
}
В SQL был бы такой запрос:
sqlite> select TestTable.id, TestTable.dict_id, TestTable.value from TestTable,TestDict WHERE TestTable.dict_id=TestDict.id AND TestDict.name='first element';
1|1|22.0
sqlite> select TestTable.id, TestDict.name, TestTable.value from TestTable,TestDict WHERE TestTable.dict_id=TestDict.id AND TestDict.name='first element';
1|first element|22.0
p.s. Пытаюсь «лесом» обойти вот эту проблему https://www.linux.org.ru/forum/development/11689249?cid=11689890 (комментарий)