2013-07-30 45 views
3

我是Qt新手,并希望为程序实现一些对话框。QTlitter内QSplitter切换非常缓慢

该对话框的GUI很简单:左侧有一个树,右侧有一些标签(标签的数量可能会更改),并且每个标签中都有一些用于输入的小部件。

但是当我使用Qt5.0.2实现这个对话框时,我发现它切换标签非常慢。 (通常超过0.1秒来切换标签,有时如果我随机点击标签多次,它会停止响应几秒钟)

我想知道如果我以错误的方式使用Qt,或者如果有什么我可以做,以提高性能

这里是我的情况为例:

TestQT::TestQT(QWidget *parent) 
    : QMainWindow(parent) 
{ 

    QSplitter* pSplitter = new QSplitter(); 
    QTreeWidget* pTree = new QTreeWidget(); 

    pSplitter->addWidget(pTree); 

    QTabWidget* pTabs = new QTabWidget(); 

    for (int i = 0; i < 10; i++) 
    { 
     QWidget* pPage = new QWidget(); 
     QVBoxLayout* pLayout = new QVBoxLayout(); 
     for (int j = 0; j < 20; j++) 
     { 
      QHBoxLayout* pLineLayout = new QHBoxLayout(); 
      pLineLayout->addWidget(new QCheckBox()); 
      pLineLayout->addWidget(new QLineEdit()); 
      pLayout->addLayout(pLineLayout); 
     } 
     pPage->setLayout(pLayout); 

     pTabs->addTab(pPage, tr("Page%1").arg(i)); 
    } 

    pSplitter->addWidget(pTabs); 

    this->setCentralWidget(pSplitter); 
} 
+0

对我来说工作很快。尝试运行剖析器下的代码来查看程序的运行速度。 –

+0

您好Riateche,您能否为Windows平台上的QT推荐一款性能分析工具?谢谢! – Liven

+0

如果你使用MinGW编译器,'gprof'很好。 –

回答

0

我库巴同意。当另一个动作阻塞其正在运行的线程时,通常会发生GUI故障,所以这些情况下的解决方案是将GUI或该动作移动到另一个线程。

由于我在这里只看到了GUI的代码,因此我们先尝试将GUI移动到另一个线程。使用标题QThread,将这些代码添加到您的功能中,看看它是否有帮助:

QThread * t1 = new QThread(); 
this->moveToThread(t1); 
t1->start();