QT了QSplitter且没有响应GUI(CPU 100%)(Qt QSplitter and un

2019-08-04 02:08发布

我试图实现以下布局

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
|               |                |
|               |                |
|   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没有重载。 问题是,我需要tabWidget!

我怎样才能解决这个问题,让我的布局和分割?

Answer 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的-使分离器的水平和垂直于同一时间

和CPU现在没有更多的重载。



文章来源: Qt QSplitter and unresponsive GUI (cpu 100%)