2012-12-13 29 views
1

我試圖實現以下佈局的Qt了QSplitter,反應遲鈍的GUI(CPU 100%)

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

的TabWidget和GLWidget之間的佈局是通過與水平方向的了QSplitter管轄。另一個垂直方向的QSplitter需要在之前的分離器和QTextEdit控件之間,這樣我才能選擇隱藏文本。

目前我執行的是以下(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!

我該如何解決這個問題,保持我的分離器佈局?

+0

確實是'QTabWidget',如果你只是在裏面放了一個'QLabel'或'QPushButton',你會得到100%的CPU嗎? – cmannett85

+0

似乎以這種方式重新排列的東西解決了這個問題: http://stackoverflow.com/questions/8685005/qt-making-a-splitter-horizo​​ntal-and-vertical-at-same-time?rq=1 – linello

+0

請把它寫成答案並接受它,謝謝:)甚至標記/關閉爲重複或其他東西 – Smar

回答

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現在已經沒有更多重負荷的。