我正在尝试实现以下布局
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| | |
| | |
| QTABWIDGET | QGLWIDGET |
| | |
| | |
|_______________|________________|
| |
| |
| TEXTEDIT |
|________________________________|
在 TabWidget 和 GLWidget 之间,布局由水平方向的 QSplitter 控制。在上一个拆分器和 QTextEdit 小部件之间需要另一个垂直方向的 QSplitter,以便我可以选择隐藏文本编辑。
目前我的实现如下(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);
我的应用程序似乎可以正常工作,但是当我最大化它时,CPU负载跳到90%及以上,并且gui界面很慢!
我发现你不能在QSplitter中放置布局http://qt-project.org/doc/qt-4.8/qsplitter.html
所以我试图glTabSplitterHorizontal->addWidget(ui->tabWidget);
评论该行,并且 CPU 负载不重。问题是我需要那个标签小部件!
如何解决此问题,使用拆分器保持布局?
我通过以下方式重组了我的代码:
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 - 同时使分离器水平和垂直
并且 CPU 现在不再负载繁重。