2010-10-08 6 views
3

Salutations à tous,QT séparateur widget?

Y a-t-il un widget pour séparer deux QWidgets et aussi donner un focus complet à un widget. Comme le montre la figure suivante? alt text

Merci à l'avance, umanga

+0

J'ai ajouté un code simple à titre d'exemple. – mosg

+0

merci mosg pour votre temps. Vous avez sauvé ma journée! –

Répondre

6

Que diriez-vous? QSplitter

QWidget 1, par exemple, QListView. QWidget 2 est une combinaison de QWidget s (la partie gauche est simple QPushButton avec la légende afficher/masquer, et la partie droite un autre widget) ... Tout ce que vous avez à faire est de cacher votre QWidget2 lorsque l'utilisateur clique sur QPushButton. ..

Si vous avez besoin d'un exemple, je peux le poster.


Mise à jour

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 >"); 
    } 
} 
+0

merci mogs, voulez-vous dire que j'utilise un QSplitter comme le widget en couleur bleu foncé? –

+0

Ce serait génial si vous pouvez poster un example.thanks –