2011-12-30 11 views
7

Ho uno QGridLayout con uno QSplitter su di esso. In questo QSplitter ho due elementi con uno splitter che mi consente di spostare lo splitter da sinistra a destra. Bene, ci sta bene. Ma poi voglio aggiungere un altro splitter ma che si muove verso l'alto. (Mi spiego con un'immagine.)Qt - Rendere uno splitter orizzontale e verticale allo stesso tempo

split window with two boxes atop a single wide box

quindi è per lo più avere 2 splitter, uno che si muove da sinistra a destra e l'altro che si muove up-to-down.

Spero che tu capisca.

QGridLayout *layout = new QGridLayout(this); 
QSplitter *splitter = new QSplitter(); 
text1 = new QPlainTextEdit(); 
text2 = new QPlainTextEdit(); 
splitter->addWidget(text1); 
splitter->addWidget(text2); 
text1->resize(800, this->height()); 
layout->addWidget(splitter, 1, 0); 
browser = new QTextBrowser(); 
browser->resize(1, 1); 
layout->addWidget(browser, 2, 0); 
setLayout(layout); 

Qui aggiungo solo uno splitter, poiché non so come fare il 2 °.

+0

Puoi aggiungere il codice sorgente che crea il tuo 'QGridLayout' e aggiunge lo splitter? – sarnold

+0

@soldold: c'è il primo post modificato. – Kazuma

risposta

15

Dovresti essere in grado di adattarlo facilmente alle tue esigenze. L'idea è di creare un contenitore per i primi due elementi, quindi collegare il contenitore con il terzo elemento tutto tramite splitter.

#include <QtGui> 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    QWidget wnd; 

    QTextEdit *editor1 = new QTextEdit; 
    QTextEdit *editor2 = new QTextEdit; 
    QTextEdit *editor3 = new QTextEdit; 

    QSplitter *split1 = new QSplitter; 
    QSplitter *split2 = new QSplitter; 

    QVBoxLayout *layout = new QVBoxLayout; 

    QWidget *container = new QWidget; 
    QVBoxLayout *container_layout = new QVBoxLayout; 

    split1->addWidget(editor1); 
    split1->addWidget(editor2); 

    container_layout->addWidget(split1); 
    container->setLayout(container_layout); 

    split2->setOrientation(Qt::Vertical); 
    split2->addWidget(container); 
    split2->addWidget(editor3); 

    layout->addWidget(split2); 

    wnd.setLayout(layout); 

    wnd.show(); 

    return app.exec(); 


} 
+0

Super, questo risolve anche alcuni bug in Qt quando si inseriscono i layout all'interno di QSplitter! http://stackoverflow.com/questions/13868495/qt-qsplitter-and-unresponsive-gui-cpu-100 – linello