每当我打开一个小部件时,我都会添加所有的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
}
}
答案 0 :(得分:0)
关于Qt中各种视图小部件的事情是,所选项目和当前项目不是一样的,不一定。
如果您设置了当前项目,它将成为所选项目,但是当您以相反方式执行此项目时,它将不会成为所选项目。可以有多个选定的项目,但只有一个当前项目。
现在我不知道为什么你第二次得到一个NULL。我需要完整的代码,但我可以告诉你:
m_pConnList->item(0)->setSelected(true);
应该是:
m_pConnList->setCurrentItem( m_pConnList->item(0) );
或:
m_pConnList->setCurrentIndex(0);
作为一个例子,这里是一个小部件的屏幕截图,所选项目突出显示,当前项目有一个焦点边框:
我希望这会有所帮助。如果没有,请发布更多代码或github链接等。