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

标签 c++ qt cpu qsplitter

我正在尝试实现以下布局

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
|               |                |
|               |                |
|   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

所以我尝试注释行 glTabSplitterHorizo​​ntal->addWidget(ui->tabWidget); 并且 CPU 负载不重。 问题是我需要那个 tabWidget!

我该如何解决这个问题,让我的布局保持分离器?

最佳答案

我按照以下方式重组了我的代码:

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 不再承受重载。

关于c++ - Qt QSplitter 和无响应的 GUI(cpu 100%),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13868495/

相关文章:

c++ - Visual Studio 2010 文本编辑器错误插入符号

qt - 动态更改动画中使用的值

c++ - 使用 JNI (C++) 从 native 线程调用 Java 方法时出现问题

c++ - 避免在写入文件时覆盖现有文件的内容

c++ - 在类的函数中使用 'const'

c++ - qt QTableWidget programattic select of cell - 如何准备好光标?

C++ Qt : Check the current State of QStateMachine

python - python while 循环 : even when sleeping 97% of the time. 的 CPU 使用率高为什么?

android - 有什么方法可以计算当前 android 版本的 CPU 负载吗?

c++ - std::chrono::clock,硬件时钟和周期计数