Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Evgeniya от Февраль 18, 2010, 21:36



Название: editor на первом элементе этого столбца
Отправлено: Evgeniya от Февраль 18, 2010, 21:36
Доброго времени суток!!!
Устанавливаю делегат на столбец таблицы QTableView... и вот я хочу,чтобы сразу при открытии editor был на первом элементе этого столбца...
Код
C++ (Qt)
MyModel *mod=new MyModel();
mod->setQuery("select * from [table]");
ui.tableView->setModel(mod);
MyDSBDelegat *dsbd = new MyDSBDelegat();
ui.tableView->setItemDelegateForColumn(2,dsbd);
ui.tableView->edit(mod->index(0,2));
 
Только вот не появляется editor на 1 элементе 3 столбца... >:(


Название: Re: editor на первом элементе этого столбца
Отправлено: SABROG от Февраль 18, 2010, 21:39
Вероятно потому, что выборка из базы данных происходит только после возвращения в основной цикл событий, а в момент вызова edit() модель еще пуста.


Название: Re: editor на первом элементе этого столбца
Отправлено: Evgeniya от Февраль 18, 2010, 21:46
а как-же сделать чтобы сначала заполнялась модель,а потом происходил вызов edit()??


Название: Re: editor на первом элементе этого столбца
Отправлено: Evgeniya от Февраль 18, 2010, 22:40
ведь поидеи сначала заполняется модель,затем она добавляется во вьюшку,а потом уже вызывается edit()... хотя у меня тоже такое ощущения что сначала выполняется edit(),а уже потом заполняется модель.. Но почему так происходит???


Название: Re: editor на первом элементе этого столбца
Отправлено: MoPDoBoPoT от Февраль 18, 2010, 23:03
а как-же сделать чтобы сначала заполнялась модель,а потом происходил вызов edit()??
Вызов данного слота поставить в очередь. Это делается через QTimer::singleShot() или QMetaObject::invokeMethod() с Qt::ConnectionType = Qt::QueuedConnection.


Название: Re: editor на первом элементе этого столбца
Отправлено: SABROG от Февраль 19, 2010, 00:44
Попробуй вызвать mod->select();, а после него уже edit()


Название: Re: editor на первом элементе этого столбца
Отправлено: Evgeniya от Февраль 19, 2010, 09:26
Чего-то не получается...делаю сначала
Код
C++ (Qt)
ui.tableView->setCurrentIndex(mod->index(0,2));
 
а потом edit тож самое..
И вообще получается,что editor создается на нулевой элемент,в него вставляются данные и он сразу вставляет данные в модель,модель обновляется и соответственно после обновления editor уже пропадает..


Название: Re: editor на первом элементе этого столбца
Отправлено: Evgeniya от Февраль 19, 2010, 11:14
Я вот смотрю при первом вызове эдита,сначала он создается, потом в него вставляются данные из модели, и сразу вызывается метод setData для записи данны из эдита в модель...блин,ну почему так происходит


Название: Re: editor на первом элементе этого столбца
Отправлено: SABROG от Февраль 19, 2010, 12:07
Попробуй воспользоваться советом MoPDoBoPoT'a


Название: Re: editor на первом элементе этого столбца
Отправлено: Evgeniya от Февраль 19, 2010, 22:12
Если я этот класс использую отдельно от своего приложения,то все нормально работает...а когда я вызываю этот класс из своего приложения, то всегда при первом вызове эдитора почему-то всегда вызывается эдитор нулевого элемента...
класс свой вызываю так:
Код
C++ (Qt)
  MW * win = new MW(this);
   QMdiSubWindow * subWin = new QMdiSubWindow();
   subWin->setAttribute(Qt::WA_DeleteOnClose);
   subWin->setWidget(win);
   m_ui->mdiArea->addSubWindow(subWin,Qt::Widget);
   subWin->showMaximized();
 
а если вызываю так:
Код
C++ (Qt)
MW * win = new MW(this);
win->show();
 
то все нормально работает..
В чем может быть причина?