我是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);
}
答案 0 :(得分:0)
我同意库巴。当其他操作阻止正在运行的线程时,大多数情况下会发生GUI故障,因此在这些情况下,您的解决方案是将GUI或该操作移动到另一个线程。
由于我在这里只看到GUI的代码,让我们先尝试将GUI移动到另一个线程。使用标题QThread
,将这些代码添加到您的函数中,看看它是否有帮助:
QThread * t1 = new QThread();
this->moveToThread(t1);
t1->start();