crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
maint
  опции профиля:
сообщение 17.10.2012, 8:16
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Обнаружил неприятную вещь в Qt. Если в новом окне QTableView создается по new, то окна остаются активными навсегда (так же не происходит переключение по мыше и не наботают activateNextSubWindows и prew, активация окна не проходит), сколько бы их не было. Если описывать просто, то все нормально. И как с этим бороться не представляю

если в QTableView сделать setParent на создаваемое окно, все возвращается на круги своя. Похоже что QMdiArea и QTableView категорически не хотят дружить. Выхода из положения не вижу. Может у кого есть идеи ?

Если вдруг кому покажется интересным могу выложить минимальный проект, собранный из стандартного примера mdi с добавкой вызова окон с QTableView

Сообщение отредактировал maint - 17.10.2012, 10:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 17.10.2012, 14:27
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(maint @ 17.10.2012, 11:16) *
Если описывать просто,

- "просто", это как ? Может быть, свойства не те задаёшь в new (попробуй вытащить свойства из "просто" и поглядеть их. Поставь такие же в new)

Цитата(maint @ 17.10.2012, 11:16) *
Выхода из положения не вижу

если на самом деле глюк, попробуй сделать прослойку из QWidget между QMdiArea и QTableView


проект давай, конечно же
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 17.10.2012, 14:47
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Не совсем понял в чем проблема, давай проектик.

Но когда-то tableView я MDI точно вставлял.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 17.10.2012, 14:58
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(RazrFalcon @ 17.10.2012, 20:47) *
Не совсем понял в чем проблема, давай проектик.

Но когда-то tableView я MDI точно вставлял.

выкладываю. Если в файле fbooks.cpp закоментировать строку 34, то все нормально
http://maint.mirivlad.ru/download/mdi.rar
http://maint.mirivlad.ru/download/mdi.rar

да, нажимать надо на "New"

Сообщение отредактировал maint - 17.10.2012, 15:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 17.10.2012, 17:07
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


ну, как я и предполагал - различны флаги окна (а вот почему - вопрос открытый)

а именно, отличие во флаге Qt::Window

если его доставить вручную, то поведение окон такое же, как при закомментированной строке 34

    view.setParent(this);   // ЕСЛИ ЭТО ЗАКОМЕНТИРОВАТЬ, ТО ОКНА БУДУТ ВЕСТИ СЕБЯ ПРАВИЛЬНО
    view.move(2, toolBar->height() + 2);
    view.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    view.setFocus();

    view.setWindowFlags(view.windowFlags()|Qt::Window); //<<<<<<<<<<<<<


ещё глюк попутно нашёл - если попытаться открыть один из файлов png кнопкой панели инструментов, то программа падает )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 17.10.2012, 17:37
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(Алексей1153 @ 17.10.2012, 23:07) *
ну, как я и предполагал - различны флаги окна (а вот почему - вопрос открытый)

а именно, отличие во флаге Qt::Window

если его доставить вручную, то поведение окон такое же, как при закомментированной строке 34

    view.setParent(this);   // ЕСЛИ ЭТО ЗАКОМЕНТИРОВАТЬ, ТО ОКНА БУДУТ ВЕСТИ СЕБЯ ПРАВИЛЬНО
    view.move(2, toolBar->height() + 2);
    view.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    view.setFocus();

    view.setWindowFlags(view.windowFlags()|Qt::Window); //<<<<<<<<<<<<<


ещё глюк попутно нашёл - если попытаться открыть один из файлов png кнопкой панели инструментов, то программа падает )

так в том то и хохма, что без видимого QTableView, теряется смысл.
Может и падать, я собрал минимально возможный проект из стандартного примера и своего куска особо остальным не заморачиваясь, что бы понять где мог ошибиться.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 17.10.2012, 19:23
Сообщение #7


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


во! Нашёл

в общем, всё оставляй, как у тебя есть (только смотри примечание в конце сообщения)

но в fBooks::fBooks(int w, int h, QString title)

перед
resize(w, h);
добавь

    setWindowFlags(windowFlags()|Qt::SubWindow);
    resize(w, h);



---------------
*примечание, чистое ИМХО

члены-переменные лучше объявлять в виде указателей и создавать их через new в конструкторе. А то можно перегрузить стек ненароком, ведь неизвестно, сколько чего лежит в классе. Кроме того, удобнее задавать родителя - через конструктор

Сообщение отредактировал Алексей1153 - 17.10.2012, 19:27
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 29.4.2025, 1:43