Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ mdiArea->closeActiveSubWindow() - глюк или так и должно быть ?

Автор: potkin 15.12.2010, 13:37

Юзаю виджет mdiArea.
Проблема:
Если открыто много окошек в mdiArea, то при закрытии N-го окна, активным становиться N+1
или
при закрытии последнего окна активным становиться первое.
Так же и в примерах: "Main Windows -> MDI"
Мне такой расклад не подходит.

Мне надо, что бы при закрытии Чилда активным стало не следующее окошко, а предыдущее, то есть при закрытии N-го окна, активным становиться N-1

Можно конечно и цикл использовать:

foreach (QMdiSubWindow *window, mdiArea->subWindowList())
MdiChild *mdiChild = ...
....

пробегать по всем Чилдам и проверять "что-то", но это менингит.
Может есть более лёгкий способ ???

Заранее спасибо.

Автор: potkin 16.12.2010, 10:27

Всё таки циклом ...
Делаю так:

void RuhCinCapSub::ActivatedWindow()
{
    foreach (QMdiSubWindow *window, gl->mdiArea->subWindowList())
    {
        if(window->widget()->toolTip().toInt() == this->toolTip().toInt())
        {
            QMdiSubWindow *existing = window;
            if (existing) gl->mdiArea->setActiveSubWindow(existing);
        }
    }
}

В "toolTip()" присваиваю уникальный идентификатор и по нём и ищу.

П.С. Может есть всё таки какие-то встроенные средства ???

Автор: Алексей1153 16.12.2010, 10:44

а ассоциацию применить нельзя разве ? Коли уж идентификатор уникальный

Кстати, от foreach у меня один негатив остался - он (и это написано в доке) сначала делает копию контейнера и только копию шмонает. (Я пользуюсь циклом for с итератором)

Автор: BRE 16.12.2010, 10:59

Цитата(Алексей1153 @ 16.12.2010, 10:44) *
Кстати, от foreach у меня один негатив остался - он (и это написано в доке) сначала делает копию контейнера и только копию шмонает. (Я пользуюсь циклом for с итератором)

А почему ты думаешь, что копирование Qt-контейнера такая тяжелая операция (грубо говоря это инкремент счетчика). :)
А вот реально копия будет сделана только, если при попытке его модификации (точнее при вызове не константного метода).

Автор: Алексей1153 16.12.2010, 11:16

BRE, я об этом не думаю, мне просто не требуется такое поведение, ведь я ХОЧУ менять исходный контейнер через итераторы, а тут такая подстава :) Я первый раз долго не мог понять , что происходит. Потом меня в доку ткнули

Автор: potkin 16.12.2010, 13:47

Алексей1153,

Цитата
а ассоциацию применить нельзя разве ? Коли уж идентификатор уникальный

А можно поподробнее ... ?

Автор: Алексей1153 16.12.2010, 15:13

я не знаю подробностей, ты их знаешь :) А говорю про, например. std::map

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)