Qt - Создание разделителя по горизонтали и вертикали одновременно - PullRequest
9 голосов
/ 31 декабря 2011

У меня есть QGridLayout с QSplitter на нем.В этом QSplitter у меня есть два элемента с разделителем, который позволяет мне перемещать разделитель слева направо.Хорошо, там все хорошо.Но затем я хочу добавить еще один сплиттер, но он движется вверх-вниз.(Я объясню с изображением.)

split window with two boxes atop a single wide box

Таким образом, в основном это 2 сплиттера, один из которых перемещается слева направо, а другой - вверх-вниз.

Надеюсь, вы понимаете.

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);

Здесь я добавляю только 1 сплиттер, так как не знаю, как сделать 2-й.

1 Ответ

17 голосов
/ 31 декабря 2011

Вы должны легко адаптировать это для своих нужд.Идея состоит в том, чтобы создать контейнер для первых двух элементов, а затем соединить контейнер с третьим элементом через сплиттеры.

#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();


}
...