Russian Qt Forum
Мая 29, 2025, 20:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: mdi окна  (Прочитано 6680 раз)
kadr
Гость
« : Декабря 21, 2009, 12:29 »

Привет всем.
Помогите решить проблему, делаю прогу с mdi окнами:
main_form - это класс виджета!
 main_form *m_f = new main_form;
    m_f->setAttribute(Qt::WA_DeleteOnClose);
    ui->area->addSubWindow(m_f);
    m_f->show();
    m_f->setFixedSize(427,171);
Так вот проблема в том, что размер не становиться фиксированным и цвет формы серый, хотя я ставил желтый, одним словом все стандартное, как передать в эту форму цвет и фиксацию размера?  
Записан
BRE
Гость
« Ответ #1 : Декабря 21, 2009, 14:23 »

Ты попробуй указывать фиксированный объект не твоему внутреннему виджету, а внешнему QMdiSubWindow.
Указатель на него, как раз возвращает:
ui->area->addSubWindow(m_f);
Записан
kadr
Гость
« Ответ #2 : Декабря 21, 2009, 15:40 »

Ты попробуй указывать фиксированный объект не твоему внутреннему виджету, а внешнему QMdiSubWindow.
Указатель на него, как раз возвращает:
ui->area->addSubWindow(m_f);

Спасибо помогло. У меня вот возник еще один вопрос, как сделать так, что бы открывалась всего одна копия виджета:
lgot_rech *lgota = new lgot_rech;
lgota->setAttribute(Qt::WA_DeleteOnClose);
ui->area->addSubWindow(lgota)->setFixedSize(708,383);
lgota->show();
то есть, если в данный момент форма уже открыта, что бы он не давал больше открывать другие копии?   
Записан
BRE
Гость
« Ответ #3 : Декабря 21, 2009, 15:43 »

Посмотри на:
QList<QMdiSubWindow *> QMdiArea::subWindowList ( WindowOrder order = CreationOrder ) const
Записан
kadr
Гость
« Ответ #4 : Декабря 21, 2009, 16:00 »

Посмотри на:
QList<QMdiSubWindow *> QMdiArea::subWindowList ( WindowOrder order = CreationOrder ) const
Посмотрел, но не совсем понял, как это может мне помочь:
ui->area->subWindowList(QMdiArea::CreationOrder);
Что мне с этим делать дальше?
Записан
BRE
Гость
« Ответ #5 : Декабря 21, 2009, 16:12 »

Посмотри на:
QList<QMdiSubWindow *> QMdiArea::subWindowList ( WindowOrder order = CreationOrder ) const
Посмотрел, но не совсем понял, как это может мне помочь:
ui->area->subWindowList(QMdiArea::CreationOrder);
Что мне с этим делать дальше?
Все просто.
В функции, где создаются новые окна:
* получи список всех открытых окон
* пробегись по ним и проверь, открыто ли окно нужного типа
* если нет - создай и сделай видимым
* если да - переведи его на передний план
Записан
kadr
Гость
« Ответ #6 : Декабря 21, 2009, 16:42 »

void nozologia::on_vvod_rech_triggered()
{        

    int i = 0,fl = 0;
    lgot_rech *lgota = new lgot_rech;
    lgota->setAttribute(Qt::WA_DeleteOnClose);
    ui->area->addSubWindow(lgota)->setFixedSize(708,383);
    while (ui->area->subWindowList(QMdiArea::CreationOrder).count() > 0)
    {
        if (ui->area->subWindowList(QMdiArea::CreationOrder).value(i)->isVisible())
        {
            ...
        }
        else
        {
            ...
        }
        i++;
    }
}
Одним словом вот такой алгоритмик я использую, вопрос, как определить что это то окно которое мне нужно?
« Последнее редактирование: Декабря 21, 2009, 16:48 от kadr » Записан
MoPDoBoPoT
Гость
« Ответ #7 : Декабря 21, 2009, 16:59 »

Код
C++ (Qt)
while (ui->area->subWindowList(QMdiArea::CreationOrder).count() > 0)
 
М? Может так?
Код
C++ (Qt)
foreach (QMdiSubWindow *subWindow, ui->area->subWindowList()) {
...
}
 
как определить что это то окно которое мне нужно?
По-разному. Зависит от конкретной задачи.
Можно проверять:
- тип виджета (qobject_cast<lgot_rech *>subWindow->widget()) - если окно с таким типом должно быть единственным
- имя виджета (subWindow->widget()->objectName())
- заголовок окна (subWindow->windowTitle())
...
« Последнее редактирование: Декабря 21, 2009, 17:06 от MoPDoBoPoT » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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