Да всё шикарно работает:
главное запомнить, что модель не потоко-безопасна.
setQuery(QString _value)
{
// в ГУИ потоке создаю(new) и заполняю(запросом) модель1
FModel->clear();
FModel->setQueryText(_value);
FMultiProxyModel.setSourceModel(FModel);
// создаю новый поток
TFullFillModelThread *ffm = new TFullFillModelThread();
// соединяю
QObject::connect(ffm, SIGNAL(takeFullMode(TTreeTableModel *, QObject *)),
this, SLOT(setFullModel(TTreeTableModel *, QObject *)) );
ffm->run();
...
}
void
setFullModel(TTreeTableModel *_value, QObject *_thread)
{
FMultiProxyModel.setSourceModel(_value);
FModel->disconnect();
FModel->deleteLater();
_thread->disconnect();
_thread->deleteLater();
}
ран потока, в приципе кроме него только передача текста запроса
void run()
{
TTreeTableModel *model = new TTreeTableModel();
model->setQueryText(_qt);
qDebug() <<tr("загружаем всю таблицу");
while (model->canFetchMore())
{ model->fetchMore();
qDebug() <<tr("новая порция");}
qDebug() <<tr("таблица закончилась");
emit takeFullModel(model, this);
exec();
}
почему TTreeTableModel когда писал о QTableView: переопределён метод data так, что возвращает "" у DisplayRole if ( cell(i, x) == cell(i-1, x) ) т.о. если колонка затирания первая, то получается как бы дерево:
Да всё шикарно работает:
главное запомнить, что модель не потоко-безопасна.
setQuery(QString _value)
{
// в ГУИ потоке создаю(new) и заполняю(запросом) модель1
FModel->clear();
FModel->setQueryText(_value);
FMultiProxyModel.setSourceModel(FModel);
// создаю новый поток
TFullFillModelThread *ffm = new TFullFillModelThread();
// соединяю
QObject::connect(ffm, SIGNAL(takeFullMode(TTreeTableModel *, QObject *)),
this, SLOT(setFullModel(TTreeTableModel *, QObject *)) );
ffm->run();
...
}
void
setFullModel(TTreeTableModel *_value, QObject *_thread)
{
FMultiProxyModel.setSourceModel(_value);
FModel->disconnect();
FModel->deleteLater();
_thread->disconnect();
_thread->deleteLater();
}
ран потока, в приципе кроме него только передача текста запроса
void run()
{
TTreeTableModel *model = new TTreeTableModel();
model->setQueryText(_qt);
qDebug() <<tr("загружаем всю таблицу");
while (model->canFetchMore())
{ model->fetchMore();
qDebug() <<tr("новая порция");}
qDebug() <<tr("таблица закончилась");
emit takeFullModel(model, this);
exec();
}
почему TTreeTableModel когда писал о QTableView: переопределён метод data так, что возвращает "" у DisplayRole if ( cell(i, x) == cell(i-1, x) ) т.о. если колонка затирания первая, то получается как бы дерево: