Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: i9 от Январь 17, 2006, 17:48



Название: [3.x]MainWindow, centralWidget и toolBars
Отправлено: i9 от Январь 17, 2006, 17:48
Дано:
Код:
myMainWindow::myMainWindow( ... ) : QMainWindow( ... ){
  QTable *table = new myTable( this ); //таблица и ее инициализация чем-то
  setCentralWidget( table );
  QToolBar *tb = new QToolBar( this ); //тулбар
//  show();
 table->setCurrentCell( table->numRows()-1, 0 );//на последнюю строку
}
если show() раскоментарить, то работает замечательно, т.е. окно, в нем таблица с последней текущей строкой и тулбар сверху... Но show() в конструкторе - некрасиво. А без него что-то не перещитывает свой размер и получается, что текущая(последняя) строка не показывается на высоту тулбара. Видать внутри show() что-то вызывается типа adjustSize(), но что? Может кто сталкивался?
P.S. Qt3


Название: MainWindow, centralWidget и toolBars
Отправлено: Steven_Orko от Январь 18, 2006, 08:31
А если сначала создать QToolBar, а потом уже QTable?


Название: MainWindow, centralWidget и toolBars
Отправлено: i9 от Январь 18, 2006, 10:07
Цитата: "Steven_Orko"
А если сначала создать QToolBar, а потом уже QTable?

Пробывал, такой же результат. :cry:


Название: MainWindow, centralWidget и toolBars
Отправлено: Racheengel от Январь 18, 2006, 10:48
а что мешает adjustSize() вне конструктора вызывать?


Название: MainWindow, centralWidget и toolBars
Отправлено: i9 от Январь 18, 2006, 11:53
Цитата: "Racheengel"
а что мешает adjustSize() вне конструктора вызывать?

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

PS Внутри конструктора делал adjustSize() всему, делал resize() окна, по идее должно ведь оно пересчитывать размеры всех дочерних видгетов..., а на практике получается что пересчет размеров с учетом dock обастей происходит только в show().


Название: MainWindow, centralWidget и toolBars
Отправлено: yshurik от Январь 18, 2006, 18:26
Цитата: "i9"

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


main.cpp ты ведь сам пишешь? вот там и решай когда show() а когда adjustSize() вызывать. Можешь сделать в следующем eventLoop если напишешь

QTimer::singleShot(0, this, SLOT(adjustSize()));

или еще каким подобным способом.


Название: MainWindow, centralWidget и toolBars
Отправлено: i9 от Январь 18, 2006, 20:16
Цитата: "yshurik"

main.cpp ты ведь сам пишешь? вот там и решай когда show() а когда adjustSize() вызывать. Можешь сделать в следующем eventLoop если напишешь

QTimer::singleShot(0, this, SLOT(adjustSize()));

или еще каким подобным способом.

Да я в принципе перегрузил show() у myMainWindow и туда впихнул переход на последнюю строку, Просто хотелось бы в конструкторе более менее по человечески сделать, а не обходными путями...