Qt QSplitter和无响应的GUI(cpu 100%)

时间:2012-12-13 21:06:01

标签: c++ qt cpu qsplitter

我正在尝试实现以下布局

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

在TabWidget和GLWidget之间,布局由具有水平方向的QSplitter控制。在前一个拆分器和QTextEdit小部件之间需要另一个具有垂直方向的QSplitter,以便我可以选择隐藏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);

我的应用程序似乎工作正常,但是当我最大化它时,CPU负载会跳到90%以上,并且gui界面很慢!

我发现你不能在QSplitter中放置一个布局 http://qt-project.org/doc/qt-4.8/qsplitter.html

所以我试图评论一行glTabSplitterHorizontal->addWidget(ui->tabWidget);并且CPU没有重载。 问题是我需要tabWidget!

我如何解决这个问题,保持我的布局与分割器?

1 个答案:

答案 0 :(得分:0)

我已按以下方式重新构建代码:

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 - Making a Splitter Horizontal and Vertical at same time

现在CPU不再重载了。