Название: QDockWidget - автоматическая подстройка размера
Отправлено: QCasper от Декабрь 19, 2006, 01:00
QMainWindow - на нем QDockWidget - на нем некий виджет, допустим кнопка. Теперь представьте тебе ситуацию, я отстыковываю доквиджет, и его размер остается тот же, и кнопка растянунта по нему всему. А как сделать чтобы QDockWidget принимал sizeHint кнопки при отстыковке?
Название: QDockWidget - автоматическая подстройка размера
Отправлено: Racheengel от Декабрь 19, 2006, 01:21
а конечным результатом что должно быть?
Название: QDockWidget - автоматическая подстройка размера
Отправлено: QCasper от Декабрь 19, 2006, 01:35
а конечным результатом что должно быть? главное окно, отстыкованный доквиджет такого размера как диалог, если разместить на нем кнопку в лэйауте
Название: QDockWidget - автоматическая подстройка размера
Отправлено: Racheengel от Декабрь 19, 2006, 01:41
А в чем проблема то? Зачем sizeHint, если кнопка и так в лэйауте? Что не работает?
Название: QDockWidget - автоматическая подстройка размера
Отправлено: QCasper от Декабрь 19, 2006, 01:58
А в чем проблема то? Зачем sizeHint, если кнопка и так в лэйауте? Что не работает? MainWindow::MainWindow(QWidget *parent):QMainWindow(parent) { QDockWidget *dw = new QDockWidget("pp", this); QPushButton *btn = new QPushButton(dw); dw->setWidget(btn);
addDockWidget(Qt::LeftDockWidgetArea, dw); }
Соберите и запустите. Теперь отстыкуйте доквиджет, видите какого он размера? Некрасиво да? Кнопка по центру, да еще и так беспонтово растянута, много неиспользованного места. Вот надо чтобы доквиджет принимал размер кнопки.
Название: QDockWidget - автоматическая подстройка размера
Отправлено: Dendy от Декабрь 19, 2006, 06:01
QDockWidget черезчур негибкий и сильно завязан на QMainWindow. В своём проекте я успешно поборол такое растягивание. Но только путём перехвата собьІтий. Собственно, я добился поведения как в 8-й студии. Подсвечивание области докинга, полупрозрачное плавающее окно с произвольньІм размером, приклеивание влево-вправо-вниз-вверх от области с помощью индикатора посередине области приклеивания.
Если интересно - могу вьІложить.
Название: QDockWidget - автоматическая подстройка размера
Отправлено: crocus от Декабрь 19, 2006, 06:52
Конечно интересно!!! Я еще так делал:
Название: QDockWidget - автоматическая подстройка размера
Отправлено: QCasper от Декабрь 19, 2006, 17:00
Опупительно интересно!! добавлено спустя 5 часов 59 минут: А можно поинтересоваться, в какой именно момент надо так делать? Вернее в какой момент то я знаю - в момент отстыковки, как это описать кодом?
Название: QDockWidget - автоматическая подстройка размера
Отправлено: Dendy от Декабрь 19, 2006, 17:18
Вуаля. Только хочу предупредить, что железно работает только в винде. На Маке просто времени не бьІло подправлять код. Там какие-то бока с рисованием рубер-банда. Да и написан весь код на коленке в свободное время, так что не сильно бейте. :) DockPlacer.h #pragma once
#include <QObject>
class QMainWindow;
class DockPlacer : public QObject { Q_OBJECT
public: DockPlacer( QMainWindow * mainWindow ); ~DockPlacer();
protected: void timerEvent( QTimerEvent * e ); bool eventFilter( QObject * o, QEvent * e );
private: class Private; Private * d; };
DockPlacer.cpp #include "DockPlacer.h"
#include <QMainWindow> #include <QDockWidget> #include <QApplication> #include <QStyle> #include <QMouseEvent> #include <QStylePainter> #include <QRubberBand> #include <QStyleOption> #include <QPointer> #include <QBasicTimer>
#include "indicator.xpm"
static const int Radius = 18;
class DockPlacer::Private { public: void create_band(); void collect_areas(); void update_area( const QPoint & pos, QDockWidget * dock ); void place_dock( QDockWidget * dock );
public: QMainWindow * w; QWidget * band;
QBasicTimer added_timer; QList< QPointer<QObject> > added_objects;
QImage image_center; QImage image_dock;
bool pressed; bool dragging; QPoint grabbed_pos; struct Area { QDockWidget * dock; QRect rect; Qt::DockWidgetArea area; }; QList<Area> areas; int current_area; int current_direction; };
void DockPlacer::Private::create_band() { if ( band ) return;
band = new QWidget( w, Qt::Widget ); if ( image_center.isNull() ) image_center = QImage( IndicatorImage );
band->setAttribute( Qt::WA_TransparentForMouseEvents ); #ifndef Q_WS_WIN band->setAttribute( Qt::WA_NoSystemBackground ); #endif //Q_WS_WIN band->setAttribute( Qt::WA_WState_ExplicitShowHide ); band->setVisible( false ); }
void DockPlacer::Private::collect_areas() { areas.clear();
Area central_area; central_area.dock = 0; central_area.rect = w->centralWidget()->geometry(); central_area.area = Qt::AllDockWidgetAreas; areas << central_area;
QObjectList ch = w->children(); for ( QListIterator<QObject *> it( ch ); it.hasNext(); ) { QObject * o = it.next(); QDockWidget * dock = qobject_cast<QDockWidget *>( o ); if ( !dock ) continue; if ( dock->isFloating() ) continue; if ( !dock->isVisible() ) continue; bool found = false; for ( QListIterator<Area> ait( areas ); ait.hasNext(); ) { if ( ait.next().rect == dock->geometry() ) { found = true; break; } } if ( found ) continue;
Area area; area.dock = dock; area.rect = dock->geometry(); area.area = w->dockWidgetArea( dock ); areas << area; } }
void DockPlacer::Private::update_area( const QPoint & pos, QDockWidget * dock ) { int cur_area = -1; int cur_direction = Qt::NoDockWidgetArea;
for ( int i = 0; i < areas.count(); i++ ) { const Area & area = areas.at( i );
if ( !area.rect.contains( pos ) ) continue;
cur_area = i;
// block docking to already created areas if ( !(area.area & dock->allowedAreas()) ) continue;
QPoint center = area.rect.center(); QPoint offset = pos - center;
if ( QRect( -Radius, -Radius, Radius*2, Radius*2 ).contains( offset ) ) cur_direction = Qt::AllDockWidgetAreas; else if ( QRect( -Radius, -Radius*3, Radius*2, Radius*2 ).contains( offset ) ) cur_direction = Qt::TopDockWidgetArea; else if ( QRect( -Radius, Radius, Radius*2, Radius*2 ).contains( offset ) ) cur_direction = Qt::BottomDockWidgetArea; else if ( QRect( -Radius*3, -Radius, Radius*2, Radius*2 ).contains( offset ) ) cur_direction = Qt::LeftDockWidgetArea; else if ( QRect( Radius, -Radius, Radius*2, Radius*2 ).contains( offset ) ) cur_direction = Qt::RightDockWidgetArea;
// block docking to the central widget if ( area.area == Qt::AllDockWidgetAreas && cur_direction == Qt::AllDockWidgetAreas ) cur_direction = Qt::NoDockWidgetArea;
// block docking to not allowed direction of the central widget if ( area.area == Qt::AllDockWidgetAreas && !(cur_direction & dock->allowedAreas()) ) cur_direction = Qt::NoDockWidgetArea;
break; }
if ( cur_area != current_area || cur_direction != current_direction ) { current_area = cur_area; current_direction = cur_direction; band->update(); } band->update(); }
void DockPlacer::Private::place_dock( QDockWidget * dock ) { if ( current_area == -1 || current_direction == Qt::NoDockWidgetArea ) return;
const Area & area = areas.at( current_area ); if ( area.dock == dock ) return;
if ( !area.dock ) { // this is a central widget if ( current_direction == Qt::AllDockWidgetAreas ) { // place dock contents to central widget } else { dock->setFloating( false ); w->addDockWidget( (Qt::DockWidgetArea)current_direction, dock, current_direction == Qt::TopDockWidgetArea || current_direction == Qt::BottomDockWidgetArea ? Qt::Vertical : Qt::Horizontal ); } } else { dock->setFloating( false ); switch ( current_direction ) { case Qt::TopDockWidgetArea: w->splitDockWidget( area.dock, dock, Qt::Vertical ); w->splitDockWidget( dock, area.dock, Qt::Vertical ); break; case Qt::BottomDockWidgetArea: w->splitDockWidget( area.dock, dock, Qt::Vertical ); break; case Qt::LeftDockWidgetArea: w->splitDockWidget( area.dock, dock, Qt::Horizontal ); w->splitDockWidget( dock, area.dock, Qt::Horizontal ); break; case Qt::RightDockWidgetArea: w->splitDockWidget( area.dock, dock, Qt::Horizontal ); break; case Qt::AllDockWidgetAreas: w->tabifyDockWidget( area.dock, dock ); } } }
DockPlacer::DockPlacer( QMainWindow * main_window ) : d( new Private ) { d->w = main_window; d->w->installEventFilter( this ); d->pressed = false; d->dragging = false; d->band = 0; }
DockPlacer::~DockPlacer() { if ( d->band ) delete d->band; delete d; }
void DockPlacer::timerEvent( QTimerEvent * e ) { if ( e->timerId() == d->added_timer.timerId() ) { d->added_timer.stop(); while ( !d->added_objects.isEmpty() ) { QDockWidget * dock = qobject_cast<QDockWidget *>( d->added_objects.takeFirst() ); if ( dock ) dock->installEventFilter( this ); } return; } }
bool DockPlacer::eventFilter( QObject * o, QEvent * e ) { if ( o == d->w && e->type() == QEvent::ChildAdded ) { QChildEvent * ce = static_cast<QChildEvent *>( e ); d->added_objects << ce->child(); d->added_timer.start( 0, this ); return false; }
if ( o == d->band ) { if ( e->type() == QEvent::Show ) { d->band->raise(); e->accept(); return true; }
if ( e->type() == QEvent::Paint ) { QStylePainter p( d->band );
if ( d->current_area != -1 ) { const Private::Area & area = d->areas.at( d->current_area );
p.drawImage( area.rect.center() - QPoint( d->image_center.width()/2, d->image_center.height()/2 ), d->image_center );
QRect rc; switch ( d->current_direction ) { case Qt::AllDockWidgetAreas: rc = area.rect; break; case Qt::TopDockWidgetArea: rc = QRect( area.rect.left(), area.rect.top(), area.rect.width(), area.rect.height()/2 ); break; case Qt::BottomDockWidgetArea: rc = QRect( area.rect.left(), area.rect.bottom() - area.rect.height()/2, area.rect.width(), area.rect.height()/2 ); break; case Qt::LeftDockWidgetArea: rc = QRect( area.rect.left(), area.rect.top(), area.rect.width()/2, area.rect.height() ); break; case Qt::RightDockWidgetArea: rc = QRect( area.rect.right() - area.rect.width()/2, area.rect.top(), area.rect.width()/2, area.rect.height() ); break; }
if ( !rc.isEmpty() ) { #if 0 QStyleOptionRubberBand opt; opt.shape = QRubberBand::Rectangle; opt.rect = rc; #ifndef Q_WS_MAC opt.opaque = true; #else opt.opaque = d->band->windowFlags() & Qt::ToolTip; #endif p.drawControl( QStyle::CE_RubberBand, opt ); #endif
p.save(); QColor highlight = Qt::magenta; QPen pen( highlight.dark( 120 ) ); #ifdef Q_WS_MAC pen.setWidth( pen.width() + 2 ); p.setBrush( Qt::NoBrush ); #else QColor dimHighlight( qMin( highlight.red()/2 + 110, 255 ), qMin( highlight.green()/2 + 110, 255 ), qMin( highlight.blue()/2 + 110, 255 ), 127 ); p.setBrush( dimHighlight ); #endif p.setPen( pen ); p.drawRect( rc.adjusted( 0, 0, -1, -1 ) ); p.restore(); } }
p.drawImage( d->band->mapFromGlobal( QCursor::pos() ) - d->grabbed_pos, d->image_dock );
e->accept(); return true; }
return false; }
QDockWidget * dock = qobject_cast<QDockWidget *>( o ); if ( dock ) { switch ( e->type() ) { case QEvent::MouseButtonPress: { QMouseEvent * me = (QMouseEvent *)e;
if ( me->button() != Qt::LeftButton ) return false;
if ( !(dock->features() & QDockWidget::DockWidgetMovable) ) return false;
int fw = dock->isFloating() ? dock->style()->pixelMetric( QStyle::PM_DockWidgetFrameWidth, 0, dock ) : 0; QRect title = QRect( QPoint( fw, fw ), QSize( dock->width() - fw*2, dock->height() - fw*2 ) );
if ( dock->isFloating() ) { d->grabbed_pos = me->pos(); } else { d->grabbed_pos = QPoint( dock->width()/2, 5 ); }
if ( me->button() == Qt::LeftButton && title.contains( me->pos() ) ) { d->pressed = true; dock->grabMouse(); return true; } } return false;
case QEvent::MouseMove: { QMouseEvent * me = (QMouseEvent *)e;
if ( !(me->buttons() & Qt::LeftButton) ) return false;
if ( !d->dragging ) { if ( !d->pressed ) return false;
if ( dock->isFloating() ) { dock->hide(); } else { dock->hide(); dock->setFloating( true ); dock->adjustSize(); d->grabbed_pos = QPoint( dock->width()/2, 5 ); }
QImage im = QPixmap::grabWidget( dock ).toImage(); d->image_dock = QImage( im.size(), QImage::Format_ARGB32_Premultiplied ); QPainter p( &d->image_dock ); p.drawImage( QPoint(), im ); p.setBrush( QColor( 0, 0, 0, 100 ) ); p.setCompositionMode( QPainter::CompositionMode_DestinationOut ); p.drawRect( im.rect() ); p.end();
d->w->setUpdatesEnabled( false );
// processing events will update dock layout QApplication::instance()->processEvents();
// fill d->areas with available areas to dock d->collect_areas();
// move dock to cursor dock->move( me->globalPos() - d->grabbed_pos );
if ( !d->band ) { d->create_band(); d->band->installEventFilter( this ); }
d->current_area = -2; d->update_area( d->w->mapFromGlobal( me->globalPos() ), dock );
d->band->setGeometry( d->w->rect() ); d->band->show(); d->dragging = true;
d->w->setUpdatesEnabled( true );
e->accept(); } else { d->update_area( d->w->mapFromGlobal( me->globalPos() ), dock ); dock->move( me->globalPos() - d->grabbed_pos ); e->accept(); } } return true;
case QEvent::MouseButtonRelease: { QMouseEvent * me = (QMouseEvent *)e;
d->pressed = false; dock->releaseMouse();
if ( !d->dragging ) return false;
d->band->hide(); d->dragging = false;
dock->show(); d->place_dock( dock );
if ( dock->isFloating() ) dock->move( me->globalPos() - d->grabbed_pos );
e->accept(); } return true; } }
return false; }
indicator.xpm/* XPM */ static char * IndicatorImage[]={ "88 88 164 2", "Qt c None", ".A c #3b4963", "ai c #3c4a65", ".z c #3e4c66", "ak c #3e4c67", "ah c #3f4d68", ".y c #414f6a", "#c c #4170ca", "ag c #42506c", "#b c #4372cb", ".x c #45536c", "#a c #4574cd", "af c #46546e", "#S c #4662bc", "#Q c #4662bd", "#R c #4663bd", ".w c #495671", "## c #4976ce", "ae c #4a5773", "#O c #4c4faa", ".U c #4c77ce", "#P c #4d4fa9", "#N c #4d4faa", ".v c #4d5b75", "#. c #4d7ad1", "ad c #4e5c77", "aj c #4f3f97", ".T c #4f7ad0", ".9 c #507dd2", ".B c #51409a", ".u c #515e79", "#0 c #52419b", ".V c #52419c", "ac c #52607b", ".S c #547ed3", ".8 c #5580d5", ".t c #56637e", "ab c #576580", ".R c #5882d5", ".7 c #5a84d7", ".s c #5b6883", "aa c #5c6a85", ".6 c #5d88d9", ".Q c #5e87d8", ".r c #5f6c88", "a# c #616e8a", ".5 c #628bdb", ".q c #63718c", "ao c #656b96", "ap c #656b97", "a. c #65738e", ".P c #658cdc", ".4 c #668fde", "at c #676d95", ".p c #677591", "#9 c #697793", ".o c #6b7a95", ".3 c #6b93e0", ".O c #6c93df", "#8 c #6d7c97", ".2 c #6e96e2", ".n c #6f7d9a", "#7 c #717f9c", ".1 c #7299e4", ".m c #73819d", ".N c #7398e3", "am c #74819d", "#6 c #75839f", ".0 c #759ce5", ".l c #7684a0", ".j c #7685a0", "aB c #777ba3", ".Z c #779de7", "al c #7885a2", "#5 c #7886a3", ".k c #7887a2", ".M c #799ee7", "aA c #7a7ea5", "#4 c #7a89a5", ".Y c #7a9fe8", "ar c #7b7fa6", ".L c #80a5eb", "ax c #8186a5", "aw c #868ba9", "ay c #878ca9", ".K c #87aaef", "aF c #888ca9", "aE c #888daa", ".J c #8db0f2", ".I c #93b5f5", ".H c #99b9f7", ".G c #9dbdfb", "aC c #a0a3ba", ".F c #a0c0fc", "az c #a3a6bd", "au c #a7aac1", "aD c #a8a8a8", "av c #b1b3ca", "aq c #b4c8e1", "an c #b4c9e1", ".# c #b5b5b5", "#f c #b6cbe2", "#g c #b7cbe2", "#e c #b7cbe3", "#h c #b7cce3", "#k c #bbcee4", "#i c #bbcee5", "#m c #bbcfe4", "#l c #bbcfe5", "#j c #bccee5", "aG c #bdbdbd", ".W c #c0c0c0", "#o c #c0d2e7", "#p c #c0d2e8", "#r c #c0d3e7", "#q c #c1d2e7", "#n c #c1d2e8", ".a c #c3c3c3", "#V c #c4c4c4", ".b c #c5c5c5", "#t c #c5d6ea", "#u c #c5d7ea", ".c c #c6c6c6", "#s c #c6d6ea", "#v c #c6d7ea", "#Z c #c8c8c8", ".d c #c9c9c9", "#z c #cbdaec", "#x c #cbdaed", "#y c #cbdbec", "#w c #cbdbed", ".e c #cccccc", ".f c #cecece", "#T c #cfcfcf", "#F c #cfdeef", "#D c #cfdfef", "aH c #d0d0d0", "#B c #d0deef", "#E c #d0def0", "#A c #d0dfef", "#C c #d0dff0", ".g c #d1d1d1", "#W c #d2d2d2", "#d c #d4d4d4", "#I c #d4e1f1", "#H c #d4e1f2", "#G c #d4e2f1", "#K c #d4e2f2", ".C c #d5d5d5", "#J c #d5e2f1", ".h c #d7d7d7", "#L c #d7e4f3", ".i c #d8d8d8", "#U c #d9d9d9", ".D c #dcdcdc", "#3 c #dedede", "#Y c #dfdfdf", ".E c #e0e0e0", "#X c #e1e1e1", "#2 c #e2e2e2", "#1 c #e3e3e3", ".X c #e4e4e4", "as c #e5e6ee", "#M c #ffffff", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.a.a.b.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.a.c.d.e.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.b.d.g.h.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.e.h.j.k.l.m.n.o.p.q.r.s.t.u.v.w.v.w.x.y.z.A.B.C.D.E.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B.F.F.G.H.I.J.K.L.M.N.O.P.Q.P.Q.R.S.T.U.V.W.i.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B.Y.Z.0.1.2.3.4.5.6.7.8.9#..9#.###a#b#c.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#e#e#f#g#g#g#e#e#g#e#h#e#g#g#g#e#g#g#e.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#i#i#j#i#k#l#i#k#l#l#k#i#k#k#m#l#j#i#k.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#n#o#p#o#o#o#o#q#o#o#r#o#o#p#o#r#o#q#o.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#s#t#u#t#t#v#u#s#s#u#t#t#t#t#t#u#u#u#s.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#w#w#x#x#w#w#x#w#y#z#z#w#w#w#x#w#w#w#x.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#A#B#B#C#B#B#B#B#D#C#B#E#A#A#A#F#F#A#A.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#G#H#I#H#J#H#K#G#G#K#G#K#K#G#H#I#G#K#G.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#L.V#L.V#L.V#L.V#L.V#L.V#L.V#L.V#L.V#L.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#M#M#M#M#M#M#M#M#M.V#M#M#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#M#M#M#M#M#M#M#M.V.V.V#M#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#M#M#M#M#M#M#M#N#N#N#O#P#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#M#M#M#M#M#M#Q#R#S#S#S#S#Q#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.c.f.i.B#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.a.a.c#T#U.B#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.E.D.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.a#V#V.d#W.D.B#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X#X#Y.h.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.a#V#Z#Z#T.h#Y#0#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X#1#2#3.h.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.a#V#Z#T#T.h#3#2.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.##d.X.X.X#2#3.h.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.a#V#Z#T.h.h#3#2.X.i.W.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.W.i.X.X.X.X#2#3.h.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", ".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.a#V#Z#T.h#3#2.X.X.E.i#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.i.E.X.X.X.X.X#2#3.h.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", ".#.a.a.b.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.d#T.h#3#2.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X#2#3.h#T.d.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.#", ".#.a.c.d.e.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f#T#W.h#3#2.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X#2#3.h#W#T.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.#", ".#.b.d.g.h.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i#U.D#Y#2.X.X.X.X.V#4#4#5#5#6#7#8#9a.a#aaabacadaeadaeafagahai.V.i.E.X.X.X.X.X.X.X#2#Y.D#U.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.#", ".#.c.e.haj.k.k.l.k.l.m.n.o.p.q.r.s.t.u.v.w.v.w.x.yakai.V.i.E.X.X.V.G.H.F.F.G.H.I.J.K.L.M.N.O.P.Q.P.Q.R.S.T.U.V.W.i.X.X.X.V#4#4#5#4alam.n.o.p.q.r.s.t.u.v.w.v.w.x.y.z.A.B.C.D.E.#", ".#.c.f.i.B.G.H.F.H.F.G.H.I.J.K.L.M.N.O.P.Q.P.Q.R.S.T.U.V.W.i.X.X.V.0.1.Z.Z.0.1.2.3.4.5.6.7.8.9#..9#.###a#b#c.V.##d.X.X.X.V.G.H.F.H.F.G.H.I.J.K.L.M.N.O.P.Q.P.Q.R.S.T.U.V.W.i.X.#", ".#.c.f.i.B.0.1.Z.1.Z.0.1.2.3.4.5.6.7.8.9#..9#.###a#b#c.V.##d.X.X.V#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.X.X.V.0.1.Z.1.Z.0.1.2.3.4.5.6.7.8.9#..9#.###a#b#c.V.##d.X.#", ".#.c.f.i.Banan#g#j#o#u#w#F#G#L#L#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.X.V#M#Lao#Lap#L.V#L.V#L.V#L.V#L.V#Lap#Lao#L#M.V.##d.X.X.X.V#M#M#M#M#M#M#M#M#M#M#M#L#L#I#B#x#u#p#j#fanan.V.##d.X.#", ".#.c.f.i.Banan#e#l#r#u#w#F#I#L.V#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.X.V#Mao#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#Lao#M.V.##d.X.X.X.V#M#M#M#M#M#M#M#M#M#M#M.V#L#H#C#x#t#o#i#ganan.V.##d.X.#", ".#.c.f.i.Banan#g#m#o#t#x#A#H#L#L#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.X.V#M#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#M.V.##d.X.X.X.V#M#M#M#M#M#M#M#M#M#M#M#L#L#J#B#w#t#o#k#gaqan.V.##d.X.#", ".#.c.f.i.Banan#g#k#p#t#w#A#G#L.V#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.X.V#M.V#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L.V#M.V.##d.X.X.X.V#M#M#M#M#M#M#M#M#M#M#M.V#L#H#B#w#v#o#l#ganan.V.##d.X.#", ".#.c.f.i.Banan#g#k#o#t#w#A#K#L#L#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.X.V#M#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#M.V.##d.X.X.X.V#M#M#M#M#M#M#M#M#M#M#M#L#L#K#B#x#u#o#i#eanaq.V.##d.X.#", ".#.c.f.i.Baqan#e#i#o#t#w#E#K#L.V#M#M#M#M#M#M#Q#M#M#M#M.V.##d.X.X.V#M.V#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L.V#M.V.##d.X.X.X.V#M#M#M#M#Q#M#M#M#M#M#M.V#L#G#B#w#s#q#k#eanan.V.##d.X.#", ".#.c.f.i.Banaq#h#k#r#t#z#B#G#L#L#M#M#M#M#M#P#S#M#M#M#M.V.##d.X.X.V#M#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#M.V.##d.X.X.X.V#M#M#M#M#R#N#M#M#M#M#M#L#L#G#D#y#s#o#l#ganan.V.##d.X.#", ".#.c.f.i.Banan#e#l#o#u#z#C#K#L.V#M#M#M#M.V#O#S#M#M#M#M.V.##d.X.X.V#Map#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#Lap#M.V.##d.X.X.X.V#M#M#M#M#S#N.V#M#M#M#M.V#L#K#C#z#u#o#l#eanan.V.##d.X.#", ".#.c.f.i.Banan#g#l#o#s#y#D#G#L#L#M#M#M.V.V#N#S#M#M#M#M.V.##d.X.X.V#M#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#M.V.##d.X.X.X.V#M#M#M#M#S#N.V.V#M#M#M#L#L#G#B#z#t#r#k#haqan.V.##d.X.#", ".#.c.f.i.Banan#e#k#q#s#w#B#G#L.V#M#M#M#M.V#N#S#M#M#M#M.V.##d.X.X.V#M.V#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L.V#M.V.##d.X.X.X.V#M#M#M#M#S#O.V#M#M#M#M.V#L#K#E#w#t#o#i#eanaq.V.##d.X.#", ".#.c.f.i.Baqan#e#i#o#u#x#B#K#L#L#M#M#M#M#M#N#R#M#M#M#M.V.##d.X.X.V#M#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#M.V.##d.X.X.X.V#M#M#M#M#S#P#M#M#M#M#M#L#L#K#A#w#t#o#k#ganan.V.##d.X.#", ".#.c.f.i.Banan#g#l#o#v#w#B#H#L.V#M#M#M#M#M#M#Q#M#M#M#M.V.##d.X.X.V#M.V#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#Lao#M.V.##d.X.X.X.V#M#M#M#M#Q#M#M#M#M#M#M.V#L#G#A#w#t#p#k#ganan.V.##d.X.#", ".#.c.f.i.Banaq#g#k#o#t#w#B#J#L#L#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.X.V#M#L#L#L#L#L#L#L.V#L.V#L.V#L.V#Lap#Lao#M#M.V.##d.X.X.X.V#M#M#M#M#M#M#M#M#M#M#M#L#L#H#A#x#t#o#m#ganan.V.##d.X.#", ".#.c.f.i.Banan#g#i#o#t#x#C#H#L.V#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.X.V#Map#L#L#L#L#Lap#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.X.X.V#M#M#M#M#M#M#M#M#M#M#M.V#L#I#F#w#u#r#l#eanan.V.##d.X.#", ".#.c.f.i.Banan#f#j#p#u#x#B#I#L#L#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.X.V#M#L#L#L#L#L#L#L#M.V.V.V.V.V.V.V.V.V.V.V.V.V.##d.X.X.X.V#M#M#M#M#M#M#M#M#M#M#M#L#L#G#F#w#u#o#j#ganan.V.##d.X.#", ".#.c.f.i.Banan#e#i#o#t#w#B#H#L.V#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.X.V#Mao#L#L#L#L#Lao#M.V#M#M#M#M#M.V#M#M#M#M#M.V.##d.X.X.X.V#M#M#M#M#M#M#M#M#M#M#M.V#L#K#A#w#u#q#i#ganan.V.##d.X.#", ".#.c.f.i.Banan#e#i#n#s#w#A#G#L#L#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.Xaras#Mao#Lao#Lao#Masatas.b.#.basatas.b.#.basat.##d.X.X.X.V#M#M#M#M#M#M#M#M#M#M#M#L#L#G#A#x#s#o#k#eanan.V.##d.X.#", ".#.c.f.i.B.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.##d.X.Xauavas#M#M#M#M#Masavawavas#Masavaxavas#Masavay.##d.X.X.X.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.##d.X.#", ".#.c.f.i.C.W.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.W.i.X.X.iazaA.V.V.V.V.VaBaCaDaEat.VataFaDaFat.VatayaDaG.i.X.X.X.i.W.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.W.i.X.#", ".#.c.f.i.D.i#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.i.E.X.X.EaHaG.#.#.#.#.#.#.#aG.baG.#.#.#aG.baG.#.#.#aGaH.E.X.X.X.E.i#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.i.E.X.#", ".#.c.f.i.E.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.E.i#d#d#d#d#d#d#d.i.D.i#d#d#d.i.D.i#d#d#d.i.E.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.#", ".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.E#X#1.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.D#Y#2.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.h#3#2.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.h#3#2.X.X.X.X#4#4#5#6#7#8#9a.a#aaabacadaeadaeafagahai.V.i.E.X.X.X.X.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.h#3#2.X.X.X.V.F.F.G.H.I.J.K.L.M.N.O.P.Q.P.Q.R.S.T.U.V.W.i.X.X.X.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.h#3#2.X.X.V.Y.Z.0.1.2.3.4.5.6.7.8.9#..9#.###a#b#c.V.##d.X.X.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.h#3#2.X.V#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.h#3#2.V#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.##T.h#Y#0#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.d#W.D.B#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c#T#U.B#M#M#M#M#M#M#Q#S#S#S#S#R#Q#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#M#M#M#M#M#M#M#P#O#N#N#N#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#M#M#M#M#M#M#M#M.V.V.V#M#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#M#M#M#M#M#M#M#M#M.V#M#M#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#L.V#L.V#L.V#L.V#L.V#L.V#L.V#L.V#L.V#L.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#A#A#F#F#A#A#A#E#B#C#D#B#B#B#B#C#B#B#A.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#A#A#F#F#A#A#A#E#B#C#D#B#B#B#B#C#B#B#A.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#x#w#w#w#x#w#w#w#z#z#y#w#x#w#w#x#x#w#w.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#s#u#u#u#t#t#t#t#t#u#s#s#u#v#t#t#u#t#s.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#o#q#o#r#o#p#o#o#r#o#o#q#o#o#o#o#p#o#n.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#k#i#j#l#m#k#k#i#k#l#l#k#i#l#k#i#j#i#i.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B#e#g#g#e#g#g#g#e#h#e#g#e#e#g#g#g#f#e#e.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.Bananananananananaqanananananaqanananan.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.Banananananananaqananananaqanananananan.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.B.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.##d.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.C.W.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.W.i.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.D.i#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.i.E.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.f.i.E.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; Как юзать. Берём любой пример из Qt, например qtdir/examples/mainwindows/dockwidgets. И добавляем в конструктор MainWindow в самом начале одну строчку: Компилим. Запускаем. Тягаем. добавлено спустя 2 минуты: P.S. Заметьте какое чувство юмора у Троллей! :D НевидимьІе пиксельІ в картинке в виде символов Qt.
Название: QDockWidget - автоматическая подстройка размера
Отправлено: QCasper от Декабрь 19, 2006, 22:43
Попытался скомпилить dockplacer.cpp и сразу аццкая прорва ошибок. In file included from D:/Qt/4.1.3/include/QtGui/qwindowdefs.h:1, from D:/Qt/4.1.3/include/QtGui/../../src/gui/kernel/qwidget.h:2 7, from D:/Qt/4.1.3/include/QtGui/qwidget.h:1, from D:/Qt/4.1.3/include/QtGui/../../src/gui/widgets/qmainwindo w.h:27, from D:/Qt/4.1.3/include/QtGui/qmainwindow.h:1, from D:/Qt/4.1.3/include/QtGui/QMainWindow:1, from dockplacer.cpp:3: D:/Qt/4.1.3/include/QtGui/../../src/gui/kernel/qwindowdefs.h:32: error: `QtValid LicenseForGuiModule' does not name a type In file included from dockplacer.cpp:14: indicator.xpm:255:181: warning: no newline at end of file dockplacer.cpp: In member function `void DockPlacer::Private::update_area(const QPoint&, QDockWidget*)': dockplacer.cpp:113: error: `NoDockWidgetArea' is not a member of `Qt' dockplacer.cpp:144: error: `NoDockWidgetArea' is not a member of `Qt' dockplacer.cpp:148: error: `NoDockWidgetArea' is not a member of `Qt' dockplacer.cpp: In member function `void DockPlacer::Private::place_dock(QDockWi dget*)': dockplacer.cpp:164: error: `NoDockWidgetArea' is not a member of `Qt' dockplacer.cpp:206: error: 'class QMainWindow' has no member named 'tabifyDockWi dget'
Название: QDockWidget - автоматическая подстройка размера
Отправлено: Dendy от Декабрь 20, 2006, 01:40
Ну на счёт первого: QtValidLicenseForGuiModule - ето к лицензионности, параметрам сборки. Такое ощущение, что у Вас сборка от Console Edition. Удивительно и странно как вообще что-то Гуёвое работает.
А на счёт второго. Кхм.. забьІл добавить :) Qt 4.2 минимум.
Название: QDockWidget - автоматическая подстройка размера
Отправлено: crocus от Декабрь 20, 2006, 02:14
При создании dock в конец функции дописал: ...................... connect(dock, SIGNAL (topLevelChanged (bool)), this, SLOT (restoreSize(bool)));
и если dock становится float вызывается функция void MainWindow::restoreSize(bool flot) { if(flot) { dock->adjustSize(); } else { return; } } Да,-- и еще политики для виджета, помещаемого в dock ставятся: - иначе на 4.1.2 не работало.
|