Qt QSplitter и неотзывчивый графический интерфейс (процессор 100%)

Я пытаюсь реализовать следующий макет

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
|               |                |
|               |                |
|   QTABWIDGET  |  QGLWIDGET     |
|               |                |
|               |                |
|_______________|________________|
|                                |
|                                |
|          TEXTEDIT              |
|________________________________|

Между TabWidget и GLWidget макет управляется QSplitter с горизонтальной ориентацией. Еще один QSplitter с вертикальной ориентацией необходим между предыдущим сплиттером и виджетом QTextEdit, чтобы я мог скрыть textedit.

В настоящее время моя реализация заключается в следующем (this это указатель на MainWindow учебный класс):

QVBoxLayout *mainWindowLayout = new QVBoxLayout(ui->centralWidget);
// Here we setup an horizontal splitter between the TabWidget and the QGLWidget
QSplitter *glTabSplitterHorizontal = new QSplitter(Qt::Horizontal,this);
glTabSplitterHorizontal->addWidget(ui->tabWidget); // seems to produce the high CPU load
glTabSplitterHorizontal->addWidget(this->glWidget);

// add the horizontal splitter as first row of the layout
QSplitter *splitterConsoleVertical = new QSplitter(Qt::Vertical,this);
splitterConsoleVertical->setOrientation(Qt::Vertical);
// as first row it must be the previously allocated horizontal layout tabWidget
splitterConsoleVertical->addWidget(glTabSplitterHorizontal);
mainWindowLayout->addWidget(glTabSplitterHorizontal);

Мое приложение, кажется, работает правильно, но когда я максимизирую его, загрузка процессора поднимается до 90% и выше, а интерфейс графического интерфейса работает медленно!

Я обнаружил, что вы не можете поместить макет в QSplitter
http://qt-project.org/doc/qt-4.8/qsplitter.html

поэтому я попытался прокомментировать строку glTabSplitterHorizontal->addWidget(ui->tabWidget); и процессор не сильно загружен.
Проблема в том, что мне нужен этот tabWidget!

Как я могу обойти эту проблему, сохранив свой макет с разделителями?

1

Решение

Я реструктурировал свой код следующим образом:

QSplitter *splitHorizontal = new QSplitter;
QSplitter *splitVertical = new QSplitter;
QVBoxLayout *layout = new QVBoxLayout;
QWidget *container = new QWidget;
QVBoxLayout *container_layout = new QVBoxLayout;
splitHorizontal->addWidget(ui->tabWidget);
splitHorizontal->addWidget(this->glWidget);
container_layout->addWidget(splitHorizontal);
container->setLayout(container_layout);
splitVertical->setOrientation(Qt::Vertical);
splitVertical->addWidget(container);
splitVertical->addWidget(new QTextEdit());
layout->addWidget(splitVertical);
this->centralWidget()->setLayout(layout);
this->centralWidget()->show();

следуя предложению в этом ответе

Qt — Создание разделителя по горизонтали и вертикали одновременно

и процессор теперь больше не загружен.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]