1

次のレイアウトを実装しようとしています

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
|               |                |
|               |                |
|   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が必要なことです。

スプリッターを使用してレイアウトを維持しながら、この問題を回避するにはどうすればよいですか?

4

1 に答える 1

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 - スプリッターを水平方向と垂直方向に同時に作成する

CPU の負荷が高くなりません。

于 2012-12-14T13:40:17.367 に答える