Начальная инициализация окон.

 
0
 
C++
ava
OlegIT | 20.03.2013, 10:39
В конструкторе MainWindow создаю QWidget. Этот QWidget изначально нужно сместить в заданную позицию (затем его позиция будет меняться), вызываю в конструкторе MainWindow метод QWidget::move(X,Y);, но эффекта нет, он работает только когда всё создано, например, по нажатию на клавишу, от мыши, …. Событие Create не нашёл, и вообще стартового event нет. Виртуальная функция closeEvent есть, а createEvent или что-то подобное тоже нет или я не вижу. Из какой функции нужно вызывать этот метод, что б всё срабатывало?

Comments (6)
ava
borisbn | 20.03.2013, 09:43 #
Вызови 
 qApp->processEvents();
 сразу после 
Цитата (OlegIT @  20.3.2013,  09:39 findReferencedText)
QWidget::move(X,Y);

ava
math64 | 20.03.2013, 09:59 #
Виджет лучше добавлять в центральный виджет (который можно сделать QScrollView, если нужны будут полосы прокрутки), а не в само главное окно. Иначе могут быть проблемы при добалении меню, тулбаров и QDockWidget'ов.
Также рассмотри возможность использования QGraphicsWidget - возможно твой виджет лучше сделать QGraphicsItem.
ava
OlegIT | 20.03.2013, 13:57 #
У меня всё на центральном виджите строится setCentralWidget(widget);, а в widget добавляются другие виджиты, лайауты, в том числе и проблемный виджит. С начало я создаю все виджиты вплоть до центрального, а потом уже нужный виджит пытаюсь переместить. Программа работает, не жалуюсь, только стартовать правильно не получается.

В конструкторе MainWindow

…………………………………………
    DirFix_Widget->move(-DirFix_Widget_Count,DirFix_Widget->y());
    qApp->processEvents();
}

Не помогло.
ava
math64 | 20.03.2013, 14:50 #
Перехватывай у центрального виджета

protected:
    void resizeEvent(QResizeEvent *);
ava
OlegIT | 22.03.2013, 09:01 #
Сделал класс наследник от QWidget, в нём переопределил void resizeEvent(QResizeEvent *);, определил сигнал, по которому передал сообщение resizeEvent главному окну (signals –> slots) в слоте главного окна вызвал DirFix_Widget->move(…);qApp->processEvents();. Не помогло.
ava
OlegIT | 28.03.2013, 13:19 #
Какое-то движение к решению вопроса наметилось, когда я переопределил виртуальную функцию

void MainWindow::changeEvent(QEvent *e)
{
…………………………………
    DirFix_Widget->move(-DirFix_Widget_Count,DirFix_Widget->y());
…………………………………
}

Правда, пришлось принимать меры, флажками, чтобы код срабатывал один раз. Но всё равно правильное позиционирование происходит только после деактивации окна, update(); после move(…) не помогает.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  OlegIT ava  borisbn   math64
advanced
Submit