Russian Qt Forum
Ноябрь 27, 2024, 06:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QItemSelectionModel::setCurrentIndex не работает при открытии окна  (Прочитано 5062 раз)
evgeniy
Гость
« : Февраль 17, 2014, 01:26 »

Код:
void TreeModel::selectIndex(QModelIndex ix) {
  if (!ix.isValid()) return;
  qDebug() << "name1" << ix.data();
  tree->selectionModel()->clear();
  tree->setExpanded(ix.parent(), true);
  tree->selectionModel()->setCurrentIndex(ix, QItemSelectionModel::SelectCurrent);
  tree->scrollTo(ix);
}

Эта функция работает нормально при удалении/вставке узлов, но когда я пытаюсь (в функции QMainWindow::showEvent) сделать текущим сохранённый узел из предыдущей сессии результат такой:
Код:
name1 QVariant(QString, "Highlight elements") 
The program has unexpectedly finished.
C:\Home\develop\qt\arm\designer\Designer exited with code -1073741819
без
Код:
tree->selectionModel()->setCurrentIndex(ix, QItemSelectionModel::SelectCurrent); 
работает нормально. но мне надо выделить узел.

Спасибо огромное заранее!
« Последнее редактирование: Февраль 17, 2014, 01:29 от evgeniy » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Февраль 17, 2014, 04:19 »

А вы смотрели, что возвращает:
tree->selectionModel()
в showEvent?
Возможно, она еще не создана?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Февраль 17, 2014, 14:48 »

еще можно попробовать вызывать метод по нулевому таймеру вместо showEvent
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
evgeniy
Гость
« Ответ #3 : Февраль 18, 2014, 18:07 »

А вы смотрели, что возвращает:
tree->selectionModel()
в showEvent?
Возможно, она еще не создана?
tree->selectionModel()->clear() срабатывает. selectionModel я создаю отдельно до создания mainWindow.

еще можно попробовать вызывать метод по нулевому таймеру вместо showEvent
Да, похоже это единственный оставшийся выход. Как это сделать?

P. S. Вабще канкретный глюк - я в шоке!!!
« Последнее редактирование: Февраль 18, 2014, 18:11 от evgeniy » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Февраль 18, 2014, 19:59 »

QTimer::singleShot(0, this, yourSlot())
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
evgeniy
Гость
« Ответ #5 : Февраль 20, 2014, 13:24 »

QTimer::singleShot(0, this, yourSlot())
Спасибо огромное, kambala!
Только этот код сработал:
Код:
void MainWindow::showEvent(QShowEvent *event) {
  QMainWindow::showEvent(event);
  QTimer::singleShot(0, this, SLOT(selectLastNode()));
}
Теперь понятно почему сатана Киеву покоя не даёт - там есть хорошие люди...
Кстати, на qtcentre.org и stackoverflow.com ничем не помогли.
« Последнее редактирование: Февраль 21, 2014, 12:17 от evgeniy » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Февраль 20, 2014, 14:38 »

selectionModel я создаю отдельно до создания mainWindow.
А чем не устроила встроенная?
Записан

Qt 5.11/4.8.7 (X11/Win)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Февраль 20, 2014, 15:17 »

по идее таймер можно запускать и из конструктора, не обязательно из showEvent
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
evgeniy
Гость
« Ответ #8 : Февраль 20, 2014, 20:28 »

А чем не устроила встроенная?
1. Я пробовал и со встроенной.
2. У меня планируется один selectionModel на QTreeView и QTableView.
по идее таймер можно запускать и из конструктора, не обязательно из showEvent
Согласен, так и сделал.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.055 секунд. Запросов: 22.