QListWidget默认返回NULL

时间:2018-02-20 09:58:18

标签: qt4 qt5

每当我打开一个小部件时,我都会添加所有的widgetItem并将默认值设置为零。第一次在应用程序启动时,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
    }
}

1 个答案:

答案 0 :(得分:0)

关于Qt中各种视图小部件的事情是,所选项目和当前项目不是一样的,不一定。

如果您设置了当前项目,它将成为所选项目,但是当您以相反方式执行此项目时,它将不会成为所选项目。可以有多个选定的项目,但只有一个当前项目。

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

m_pConnList->item(0)->setSelected(true);

应该是:

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

或:

m_pConnList->setCurrentIndex(0);

作为一个例子,这里是一个小部件的屏幕截图,所选项目突出显示,当前项目有一个焦点边框:

Listwidget with a selected and a current item

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