Дадим пользователю определить удобный размер виджета

Заметили, что во многих приложениях пользователя «разрешают» самому изменять размер виджитов. В Qt это можно сделать при помощи QSplitter. Работа с ним очень напоминает работу с QLayout, поэтому вы запросто разберётесь.
Сразу покажу конечный результат:

Я буду делать программно, т.к. в Qt Disigner это делается одним нажатием кнопки «Скомпоновать по горизонтали с разделителем» ну или по вертикали, что вам там хочется то и творите.
Для понимания процесса полезно знать как создаётся в коде.
Итак создадим 3 текстовых виджета:

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

Горизонтальный разделитель:

QSplitter splitter(Qt::Horizontal);

Если же вам нужно создать вертикальный разделитель следует в качестве параметра передать Qt::Vertical.

Ну а теперь добавим в него наши виджиты:

splitter.addWidget(editor1);
splitter.addWidget(editor2);
splitter.addWidget(editor3);

Чтобы они не были пустыми добавьте в каждый текст при помощи метода setPlainText:

editor1->setPlainText("Text here");

Текст программы целиком:

#include <QtGui>

int main(int argc, char *argv[]){
    QApplication app(argc, argv);
    QTextEdit *editor1 = new QTextEdit;
    QTextEdit *editor2 = new QTextEdit;
    QTextEdit *editor3 = new QTextEdit;

    QSplitter splitter(Qt::Horizontal);
    splitter.addWidget(editor1);
    splitter.addWidget(editor2);
    splitter.addWidget(editor3);

    editor1->setPlainText("Mon enfant, ma soeur,\n"
                          "Songe  la douceur\n"
                          "D'aller l-bas vivre ensemble,\n"
                          "Aimer  loisir,\n"
                          "Aimer et mourir\n"
                          "Au pays qui te ressemble.");
    editor2->setPlainText("My child, my sister,\n"
                          "think of the sweetness\n"
                          "of going there to live together!\n"
                          "To love at leisure,\n"
                          "to love and to die\n"
                          "in a country that is the image of you!");
    editor3->setPlainText("Mein Kind, meine Schwester,\n"
                          "denke an den Traum\n"
                          "dort hin(unter) zu gehen um zusammen\n"
                          "zu leben und in aller Ruhe zu lieben,\n"
                          "Zu lieben und zu sterben\n"
                          "in dem Land, das dir gleicht.");

    splitter.setWindowTitle(QObject::tr("Splitter"));
    splitter.show();
    return app.exec();
}

На этом всё.. Как видите простые вещи помогают значительно увеличить юзабилити программы…

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий