QSplitter里面的QTabWidget切换速度很慢

时间:2013-07-30 06:57:03

标签: qt

我是Qt的新手,想要为程序实现一些对话框。

对话框的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);
}

1 个答案:

答案 0 :(得分:0)

我同意库巴。当其他操作阻止正在运行的线程时,大多数情况下会发生GUI故障,因此在这些情况下,您的解决方案是将GUI或该操作移动到另一个线程。

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

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