PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : komplexe toolbars in QT



general_gunman
22-12-2003, 18:36
moin,
hat jmd ne idee wie man in QT komplexe Toolbars erstellt, die mehr enthalten als nur buttons ??
also comboboxen und so dialogs wie im QT designer am rande...

thx4answers

tuxipuxi
22-12-2003, 18:50
hi,

ich glaub ein blick in den designer sourcecode hilft dir da am meisten...
eine wichtige stelle ist wohl die hier:



void MainWindow::setupLayoutActions()
{
if ( !actionGroupTools ) {
actionGroupTools = new QActionGroup( this );
actionGroupTools->setExclusive( TRUE );
connect( actionGroupTools, SIGNAL( selected(QAction*) ), this, SLOT( toolSelected(QAction*) ) );
}

actionEditAdjustSize = new QAction( tr( "Adjust Size" ), createIconSet("designer_adjustsize.png"),
tr( "Adjust &Size" ), CTRL + Key_J, this, 0 );
actionEditAdjustSize->setStatusTip(tr("Adjusts the size of the selected widget") );
actionEditAdjustSize->setWhatsThis( whatsThisFrom( "Layout|Adjust Size" ) );
connect( actionEditAdjustSize, SIGNAL( activated() ), this, SLOT( editAdjustSize() ) );
actionEditAdjustSize->setEnabled( FALSE );

actionEditHLayout = new QAction( tr( "Lay Out Horizontally" ), createIconSet("designer_edithlayout.png"),
tr( "Lay Out &Horizontally" ), CTRL + Key_H, this, 0 );
actionEditHLayout->setStatusTip(tr("Lays out the selected widgets horizontally") );
actionEditHLayout->setWhatsThis( whatsThisFrom( "Layout|Lay Out Horizontally" ) );
connect( actionEditHLayout, SIGNAL( activated() ), this, SLOT( editLayoutHorizontal() ) );
actionEditHLayout->setEnabled( FALSE );

actionEditVLayout = new QAction( tr( "Lay Out Vertically" ), createIconSet("designer_editvlayout.png"),
tr( "Lay Out &Vertically" ), CTRL + Key_L, this, 0 );
actionEditVLayout->setStatusTip(tr("Lays out the selected widgets vertically") );
actionEditVLayout->setWhatsThis( whatsThisFrom( "Layout|Lay Out Vertically" ) );
connect( actionEditVLayout, SIGNAL( activated() ), this, SLOT( editLayoutVertical() ) );
actionEditVLayout->setEnabled( FALSE );

actionEditGridLayout = new QAction( tr( "Lay Out in a Grid" ), createIconSet("designer_editgrid.png"),
tr( "Lay Out in a &Grid" ), CTRL + Key_G, this, 0 );
actionEditGridLayout->setStatusTip(tr("Lays out the selected widgets in a grid") );
actionEditGridLayout->setWhatsThis( whatsThisFrom( "Layout|Lay Out in a Grid" ) );
connect( actionEditGridLayout, SIGNAL( activated() ), this, SLOT( editLayoutGrid() ) );
actionEditGridLayout->setEnabled( FALSE );

actionEditSplitHorizontal = new QAction( tr( "Lay Out Horizontally (in Splitter)" ), createIconSet("designer_editvlayoutsplit.png"),
tr( "Lay Out Horizontally (in S&plitter)" ), 0, this, 0 );
actionEditSplitHorizontal->setStatusTip(tr("Lays out the selected widgets horizontally in a splitter") );
actionEditSplitHorizontal->setWhatsThis( whatsThisFrom( "Layout|Lay Out Horizontally (in Splitter)" ) );
connect( actionEditSplitHorizontal, SIGNAL( activated() ), this, SLOT( editLayoutHorizontalSplit() ) );
actionEditSplitHorizontal->setEnabled( FALSE );

actionEditSplitVertical = new QAction( tr( "Lay Out Vertically (in Splitter)" ), createIconSet("designer_edithlayoutsplit.png"),
tr( "Lay Out Vertically (in Sp&litter)" ), 0, this, 0 );
actionEditSplitVertical->setStatusTip(tr("Lays out the selected widgets vertically in a splitter") );
actionEditSplitVertical->setWhatsThis( whatsThisFrom( "Layout|Lay Out Vertically (in Splitter)" ) );
connect( actionEditSplitVertical, SIGNAL( activated() ), this, SLOT( editLayoutVerticalSplit() ) );
actionEditSplitVertical->setEnabled( FALSE );

actionEditBreakLayout = new QAction( tr( "Break Layout" ), createIconSet("designer_editbreaklayout.png"),
tr( "&Break Layout" ), CTRL + Key_B, this, 0 );
actionEditBreakLayout->setStatusTip(tr("Breaks the selected layout") );
actionEditBreakLayout->setWhatsThis( whatsThisFrom( "Layout|Break Layout" ) );
connect( actionEditBreakLayout, SIGNAL( activated() ), this, SLOT( editBreakLayout() ) );
actionEditBreakLayout->setEnabled( FALSE );

int id = WidgetDatabase::idFromClassName( "Spacer" );
actionInsertSpacer = new WidgetAction( "Layout", actionGroupTools, QString::number( id ).latin1() );
actionInsertSpacer->setToggleAction( TRUE );
actionInsertSpacer->setText( WidgetDatabase::className( id ) );
actionInsertSpacer->setMenuText( tr( "Add ") + WidgetDatabase::className( id ) );
actionInsertSpacer->setIconSet( WidgetDatabase::iconSet( id ) );
actionInsertSpacer->setToolTip( WidgetDatabase::toolTip( id ) );
actionInsertSpacer->setStatusTip( tr( "Insert a %1").arg(WidgetDatabase::toolTip( id )) );
actionInsertSpacer->setWhatsThis( QString("<b>A %1</b><p>%2</p>"
"<p>Click to insert a single %3,"
"or double click to keep the tool selected.")
.arg(WidgetDatabase::toolTip( id ))
.arg(WidgetDatabase::whatsThis( id ))
.arg(WidgetDatabase::toolTip( id ) ));

actionInsertSpacer->addTo( commonWidgetsToolBar );
commonWidgetsPage.append( actionInsertSpacer );
QWidget *w;
commonWidgetsToolBar->setStretchableWidget( ( w = new QWidget( commonWidgetsToolBar ) ) );
w->setBackgroundMode( commonWidgetsToolBar->backgroundMode() );
QWhatsThis::add( layoutToolBar, tr( "<b>The Layout toolbar</b>%1" ).arg(tr(toolbarHelp).arg("")) );
actionEditAdjustSize->addTo( layoutToolBar );
layoutToolBar->addSeparator();
actionEditHLayout->addTo( layoutToolBar );
actionEditVLayout->addTo( layoutToolBar );
actionEditGridLayout->addTo( layoutToolBar );
actionEditSplitHorizontal->addTo( layoutToolBar );
actionEditSplitVertical->addTo( layoutToolBar );
actionEditBreakLayout->addTo( layoutToolBar );
layoutToolBar->addSeparator();
actionInsertSpacer->addTo( layoutToolBar );

QPopupMenu *menu = new QPopupMenu( this, "Layout" );
layoutMenu = menu;
menubar->insertItem( tr( "&Layout" ), menu, toolsMenuId + 1 );
actionEditAdjustSize->addTo( menu );
menu->insertSeparator();
actionEditHLayout->addTo( menu );
actionEditVLayout->addTo( menu );
actionEditGridLayout->addTo( menu );
actionEditSplitHorizontal->addTo( menu );
actionEditSplitVertical->addTo( menu );
actionEditBreakLayout->addTo( menu );
menu->insertSeparator();
actionInsertSpacer->addTo( menu );
}

aus mainwindowactions.cpp



layoutToolBar = new QToolBar( this, "Layout" );
layoutToolBar->setCloseMode( QDockWindow::Undocked );
addToolBar( layoutToolBar, tr( "Layout" ) );
interpreterPluginManager = 0;
setupToolActions();
setupLayoutActions();

aus mainwindow.cpp


gruss,
tuxipuxi.

axeljaeger
22-12-2003, 20:57
Du kannst im Designer nur buttons und ComboBoxen machen, wobei die ComboBoxen auch nur Read-Only sind. Die machst du, indem du eine DropDown-ActionGroup in eine Toolbar einfügst. Alles andere geht nur mit der Hand. Da solltest du dann aber überlegen, ob nicht eine QToolBox oder ein Dockwindow angebrachter wäre.

general_gunman
23-12-2003, 12:50
hmm danke QDockWindow is genau das was ich suchte .. ;D