Anzeige:
Ergebnis 1 bis 4 von 4

Thema: komplexe toolbars in QT

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.03.2002
    Ort
    Berlin
    Beiträge
    10

    komplexe toolbars in QT

    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

  2. #2
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi,

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

    Code:
    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

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


    gruss,
    tuxipuxi.

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    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.

  4. #4
    Registrierter Benutzer
    Registriert seit
    28.03.2002
    Ort
    Berlin
    Beiträge
    10
    hmm danke QDockWindow is genau das was ich suchte .. ;D

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •