Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions

Listboxes and Comboboxes

This example program demonstrates how to use listboxes (with single selection and multi selection) and comboboxes (editable and non-editable).


Header file:

/****************************************************************************
** $Id: qt/listboxcombo.h   3.3.8   edited Jan 11 14:37 $
**
** Copyright (C) 1992-2007 Trolltech ASA.  All rights reserved.
**
** This file is part of an example program for TQt.  This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/

#ifndef LISTBOX_COMBO_H
#define LISTBOX_COMBO_H

#include <qvbox.h>

class TQListBox;
class TQLabel;

class ListBoxCombo : public TQVBox
{
    Q_OBJECT

public:
    ListBoxCombo( TQWidget *parent = 0, const char *name = 0 );

protected:
    TQListBox *lb1, *lb2;
    TQLabel *label1, *label2;

protected slots:
    void slotLeft2Right();
    void slotCombo1Activated( const TQString &s );
    void slotCombo2Activated( const TQString &s );

};

#endif


Implementation:

/****************************************************************************
** $Id: qt/listboxcombo.cpp   3.3.8   edited Jan 11 14:37 $
**
** Copyright (C) 1992-2007 Trolltech ASA.  All rights reserved.
**
** This file is part of an example program for TQt.  This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/

#include "listboxcombo.h"

#include <qcombobox.h>
#include <qlistbox.h>
#include <qhbox.h>
#include <qpushbutton.h>
#include <qstring.h>
#include <qpixmap.h>
#include <qlabel.h>
#include <qimage.h>
#include <qpainter.h>
#include <qstyle.h>


class MyListBoxItem : public TQListBoxItem
{
public:
    MyListBoxItem()
        : TQListBoxItem()
    {
        setCustomHighlighting( TRUE );
    }

protected:
    virtual void paint( TQPainter * );
    virtual int width( const TQListBox* ) const { return 100; }
    virtual int height( const TQListBox* ) const { return 16; }

};

void MyListBoxItem::paint( TQPainter *painter )
{
    // evil trick: find out whether we are painted onto our listbox
    bool in_list_box = listBox() && listBox()->viewport() == painter->device();

    TQRect r ( 0, 0, width( listBox() ), height( listBox() ) );
    if ( in_list_box && isSelected() )
        painter->eraseRect( r );
    painter->fillRect( 5, 5, width( listBox() ) - 10, height( listBox() ) - 10, TQt::red );
    if ( in_list_box && isCurrent() )
        listBox()->style().drawPrimitive( TQStyle::PE_FocusRect, painter, r, listBox()->colorGroup() );
}

/*
 * Constructor
 *
 * Creates child widgets of the ListBoxCombo widget
 */

ListBoxCombo::ListBoxCombo( TQWidget *parent, const char *name )
    : TQVBox( parent, name )
{
    setMargin( 5 );
    setSpacing( 5 );

    unsigned int i;
    TQString str;

    TQHBox *row1 = new TQHBox( this );
    row1->setSpacing( 5 );

    // Create a multi-selection ListBox...
    lb1 = new TQListBox( row1 );
    lb1->setSelectionMode( TQListBox::Multi );

    // ...insert a pixmap item...
    lb1->insertItem( TQPixmap( "qtlogo.png" ) );
    // ...and 100 text items
    for ( i = 0; i < 100; i++ ) {
        str = TQString( "Listbox Item %1" ).arg( i );
        if ( !( i % 4 ) )
            lb1->insertItem( TQPixmap( "fileopen.xpm" ), str );
        else
            lb1->insertItem( str );
    }

    // Create a pushbutton...
    TQPushButton *arrow1 = new TQPushButton( " -> ", row1 );
    // ...and connect the clicked SIGNAL with the SLOT slotLeft2Right
    connect( arrow1, SIGNAL( clicked() ), this, SLOT( slotLeft2Right() ) );

    // create an empty single-selection ListBox
    lb2 = new TQListBox( row1 );

    TQHBox *row2 = new TQHBox( this );
    row2->setSpacing( 5 );

    TQVBox *box1 = new TQVBox( row2 );
    box1->setSpacing( 5 );

    // Create a non-editable Combobox and a label below...
    TQComboBox *cb1 = new TQComboBox( FALSE, box1 );
    label1 = new TQLabel( "Current Item: Combobox Item 0", box1 );
    label1->setMaximumHeight( label1->sizeHint().height() * 2 );
    label1->setFrameStyle( TQFrame::Panel | TQFrame::Sunken );

    //...and insert 50 items into the Combobox
    for ( i = 0; i < 50; i++ ) {
        str = TQString( "Combobox Item %1" ).arg( i );
        if ( i % 9 )
            cb1->insertItem( str );
        else
            cb1->listBox()->insertItem( new MyListBoxItem );
    }

    TQVBox *box2 = new TQVBox( row2 );
    box2->setSpacing( 5 );

    // Create an editable Combobox and a label below...
    TQComboBox *cb2 = new TQComboBox( TRUE, box2 );
    label2 = new TQLabel( "Current Item: Combobox Item 0", box2 );
    label2->setMaximumHeight( label2->sizeHint().height() * 2 );
    label2->setFrameStyle( TQFrame::Panel | TQFrame::Sunken );

    // ... and insert 50 items into the Combobox
    for ( i = 0; i < 50; i++ ) {
        str = TQString( "Combobox Item %1" ).arg( i );
        if ( !( i % 4 ) )
            cb2->insertItem( TQPixmap( "fileopen.xpm" ), str );
        else
            cb2->insertItem( str );
    }

    // Connect the activated SIGNALs of the Comboboxes with SLOTs
    connect( cb1, SIGNAL( activated( const TQString & ) ), this, SLOT( slotCombo1Activated( const TQString & ) ) );
    connect( cb2, SIGNAL( activated( const TQString & ) ), this, SLOT( slotCombo2Activated( const TQString & ) ) );
}

/*
 * SLOT slotLeft2Right
 *
 * Copies all selected items of the first ListBox into the
 * second ListBox
 */

void ListBoxCombo::slotLeft2Right()
{
    // Go through all items of the first ListBox
    for ( unsigned int i = 0; i < lb1->count(); i++ ) {
        TQListBoxItem *item = lb1->item( i );
        // if the item is selected...
        if ( item->isSelected() ) {
            // ...and it is a text item...
            if ( item->pixmap() && !item->text().isEmpty() )
                lb2->insertItem( *item->pixmap(), item->text() );
            else if ( !item->pixmap() )
                lb2->insertItem( item->text() );
            else if ( item->text().isEmpty() )
                lb2->insertItem( *item->pixmap() );
        }
    }
}

/*
 * SLOT slotCombo1Activated( const TQString &s )
 *
 * Sets the text of the item which the user just selected
 * in the first Combobox (and is now the value of s) to
 * the first Label.
 */

void ListBoxCombo::slotCombo1Activated( const TQString &s )
{
    label1->setText( TQString( "Current Item: %1" ).arg( s ) );
}

/*
 * SLOT slotCombo2Activated( const TQString &s )
 *
 * Sets the text of the item which the user just selected
 * in the second Combobox (and is now the value of s) to
 * the second Label.
 */

void ListBoxCombo::slotCombo2Activated( const TQString &s )
{
    label2->setText( TQString( "Current Item: %1" ).arg( s ) );
}


Main:

/****************************************************************************
** $Id: qt/main.cpp   3.3.8   edited Jan 11 14:37 $
**
** Copyright (C) 1992-2007 Trolltech ASA.  All rights reserved.
**
** This file is part of an example program for TQt.  This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/

#include "listboxcombo.h"
#include <qapplication.h>

int main( int argc, char **argv )
{
    TQApplication a( argc, argv );

    ListBoxCombo listboxcombo;
    listboxcombo.resize( 400, 270 );
    listboxcombo.setCaption( "TQt Example - Listboxes and Comboboxes" );
    a.setMainWidget( &listboxcombo );
    listboxcombo.show();

    return a.exec();
}

See also Examples.


Copyright © 2007 TrolltechTrademarks
TQt 3.3.8