Qt4 QListWidget在默认情况下返回NULL

Qt4 QListWidget在默认情况下返回NULL,qt4,qt5,Qt4,Qt5,每次打开小部件时,我都会添加所有widgetItems,并将默认值设置为零。首次启动应用程序时,widgetItem返回有效地址,但关闭小部件并再次打开时,widgetItem地址返回为零 void csGuiSSHModuleSavedConnWindow::showSavedConnWindow(QMap<QString, StoreInfo> &savedConnInfo,const QPoint &pos) { m_savedConnMap.clear

每次打开小部件时,我都会添加所有widgetItems,并将默认值设置为零。首次启动应用程序时,widgetItem返回有效地址,但关闭小部件并再次打开时,widgetItem地址返回为零

void csGuiSSHModuleSavedConnWindow::showSavedConnWindow(QMap<QString, StoreInfo> &savedConnInfo,const QPoint &pos)
{
    m_savedConnMap.clear();
    m_savedConnMap = savedConnInfo;

    if(m_savedConnMap.keys().count() == 0)
    return;

    m_pConnList->clear();

    foreach (QString connName, m_savedConnMap.keys()) {
       QListWidgetItem* lwi = new QListWidgetItem(connName);
       m_pConnList->addItem(lwi);
       lwi->setTextAlignment(Qt::AlignLeft);
    }
    if(m_pConnList->count() == 0)
    {
    return;
    }

    m_pConnList->item(0)->setSelected(true);
    executeDialog(pos);
}

void csGuiSSHModuleSavedConnWindow::slotAddConnection()
{
    QListWidgetItem *listItem = m_pConnList->currentItem();
    QList<QListWidgetItem *> itemsSelected = m_pConnList->selectedItems();
    int count = itemsSelected.count();
    int cc = m_pConnList->count();
    if(listItem)
    { 
      //Returns NULL on second time opening the widget
    }
}

关于Qt中的各种视图小部件,需要知道的是,所选项目和当前项目不一定是相同的

如果设置了当前项,则它将成为选定项,但如果您以其他方式设置,则不会成为选定项。可以有多个选定项目,但只有一个当前项目

现在我不知道你为什么第二次得到空值。我需要完整的代码,但我可以告诉你:

m_pConnList->item(0)->setSelected(true);
应该是:

m_pConnList->setCurrentItem( m_pConnList->item(0) );
或:

例如,这里是一个小部件的屏幕截图,选中的项目高亮显示,当前项目有一个焦点边框:

我希望这有帮助。如果没有,请发布更多代码或github链接等

m_pConnList->setCurrentIndex(0);