tags:

views:

30

answers:

1

Greetings all,

Is there any widget to separate two QWidgets and also give full focus to a one widget. As shown in following figure ? alt text

Thanks in advance, umanga

+3  A: 

How about QSplitter?

QWidget 1, for exmaple, QListView. QWidget 2 is a combination of QWidgets (the left part is simple QPushButton with show/hide caption, and the right part another widget)... All you have to do, is to hide your QWidget2 when user clicked on QPushButton...

If you need an example, I may post it.


Updated

main.cpp

#include "splitter.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    splitter w;
    w.show();
    return a.exec();
}

splitter.h

#ifndef SPLITTER_H
#define SPLITTER_H

#include <QtGui/QDialog>

class splitter : public QDialog
{
    Q_OBJECT;

    QWidget*        widget1;
    QWidget*        widget2;

    QPushButton*    button;

public:
    splitter(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~splitter();

private slots:
    void    showHide(void);
};

#endif // SPLITTER_H

splitter.cpp

#include <QtGui>

#include "splitter.h"

splitter::splitter(QWidget *parent, Qt::WFlags flags)
    : QDialog(parent, flags)
{
    QApplication::setStyle("plastique");

    QListView*      listView = new QListView;
    QTableView*     tableView = new QTableView;
    button = new QPushButton("Hide >");

    widget1 = new QWidget;
    QHBoxLayout*    w1Layout = new QHBoxLayout;
    w1Layout->addWidget(listView);
    w1Layout->addWidget(button);
    widget1->setLayout(w1Layout);

    widget2 = new QWidget;
    QHBoxLayout*    w2Layout = new QHBoxLayout; 
    w2Layout->addWidget(tableView);
    widget2->setLayout(w2Layout);

    QSplitter *mainSplitter = new QSplitter(this);
    mainSplitter->addWidget(widget1);
    mainSplitter->addWidget(widget2);

    connect(button, SIGNAL(clicked()), this, SLOT(showHide()));

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(mainSplitter);

    setLayout(mainLayout);
}
splitter::~splitter()
{}
void splitter::showHide(void)
{
    if (widget2->isVisible())
    {   // hide     
        widget2->setVisible(false);
        button->setText("< Show");
    }
    else
    {   // show     
        widget2->setVisible(true);
        button->setText("Hide >");
    }
}
mosg
thanks mogs, do you mean I use a QSplitter as the widget in dark-blue color ?
umanga
It would be great if you can post an example.thanks
umanga