3

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

对话框的 GUI 很简单:左侧有一棵树,右侧有一些选项卡(选项卡的数量可能会改变),每个选项卡中都有一些用于输入的小部件。

但是当我用 Qt5.0.2 实现这个对话框时,我发现切换标签时它很慢。(一般切换一个tab需要0.1s以上,有时候随机点击多次tab会停止响应几秒)

我想知道我是否以错误的方式使用 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);
}
4

1 回答 1

0

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

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

QThread * t1 = new QThread();
this->moveToThread(t1);
t1->start();
于 2013-11-05T05:31:59.657 回答