如何在qdialog中使用螺纹填充Qcombobox中的数据

How to use Threading in QDialog to fill data in QComboBox?

本文关键字:填充 Qcombobox 数据 qdialog      更新时间:2023-10-16

我在qdialog中有10个Qcombobox。在打开对话框时,我将数据填充到这些组合中,将需要7秒即可加载对话框,如何解决此问题,因为ComboBox中没有单击的插槽。我认为我们可以使用线程解决此问题,但我不知道Qthread。

解决方案并不容易,因为QT不允许在主线程外修改小部件。

简单解决方案:使用线程将数据放入QStringLists并使用AddItems设置。Qthreadpool更容易用于此用户酶。如果问题是数据本身的大小,而不是处理。

,该解决方案将无济于事。

复杂的解决方案(适合学习):然而

您还可以创建自己的QlistView衍生的类,该类在Load Data上首次呼叫数据时,请使用true -offrite setVisible(bool)。使用setView()。

将此类的实例设置为每个组合框

关于如何使用Qthread,请参见示例,阅读教程...在这里解释很复杂,但是网上有示例和教程。

以后的编辑:

也可以使用事件过滤器:

// Install event filter
MyDlg::MyDlg()
{
     qApp->installEventFilter ( this );
}
// search for the view of the combo to be activated
// and fill it.
bool MyDlg::eventFilter ( QObject * obj, QEvent * event )
{
    QSet<QAbstractItemView *> myComboViews;
    my_combos.insert(combo1->view());
    if ( event->type () == QEvent::Show )
    {
        QAbstractItemView * view = qobject_cast<QAbstractItemView*>(obj);
        if ( myComboViews.contains(obj) && view->isVisible() )
        {
            fillComboView(view);
        }
    }
    return QDialog::eventFilter ( obj, event );
}

未经测试的代码,但是您可以获取IDEEA。