• 17559阅读
  • 14回复

关于删除和增加QListWidget中被选择的item。。。。求解 [复制链接]

上一主题 下一主题
离线iiiyyyhhhsss
 

只看楼主 倒序阅读 楼主  发表于: 2009-09-07
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2011-05-27) —
我用了一句:

m_ui->listW->removeItemWidget(m_ui->listW->currentItem());

却删除不了。。。。

当想给另一个listW增加时:

m_ui->listW2->addItem(m_ui->listW->currentItem());

也增加不了

仔细查过manul参数都是正确的,编译也通过。。。

其余clear(),clearselection()等函数都不是用于item删除的。也没有找到deleteItem字样的函数。。。当然insertItem()也出现了和addItem的情况。。。。

问题处于何处?怎样才能删除一个当前被选择的Item。。。
离线rqzrqh

只看该作者 1楼 发表于: 2009-09-07
我没用过QListWidget,只用过QTableWidget
我的方法
在QTableWidget中,我都是自己新建一个QLabel,然后插入到这个表格中去的。删除的时候把QLabel删除掉就行了
必须要delete掉,如果是 clearContent,下次就不能在上面添加东西了
离线iiiyyyhhhsss

只看该作者 2楼 发表于: 2009-09-07
呵呵,领教了。。。当然欢迎大家继续讨论QListWidget。。。
离线l_xin
只看该作者 3楼 发表于: 2009-09-07
#include "uploadVideoList.h"
#include <QMessageBox>
#include <iostream>
void UploadVideoList::removeUploadVideo()
{
//    std::cout<<" click ok "<<std::endl;
    if (!p_videoUploadList_LW->selectedItems().isEmpty())
    {
    //   std::cout<<p_videoUploadList_LW->selectedItems().at(0)->text().toStdString() <<std::endl;
         //QList<QListWidgetItem*> p_selectedVideos_LWI = p_videoUploadList_LW->selectedItems();
         for (int i = 0; i<p_videoUploadList_LW->selectedItems().size();i++)
           {
               p_videoUploadList_LW->takeItem(p_videoUploadList_LW->row(p_videoUploadList_LW->selectedItems().at(i)));
           }
     }
    else
    {
        QMessageBox *m = new QMessageBox(this);
        m->setText(tr("Please choose at least one file."));
        m->show();
    }
}


UploadVideoList::UploadVideoList()
{
   this->setAcceptDrops(true);
   cleaner = new QObjectCleanupHandler;

  p_main_vBL = new QVBoxLayout;cleaner->add(p_main_vBL);
      p_buttons_hBL = new QHBoxLayout;cleaner->add(p_buttons_hBL);
          pbtnCancel = new QPushButton;cleaner->add(pbtnCancel);
          pbtnCancel->setText(tr("Cancel"));
          p_upload_btn = new QPushButton;cleaner->add(p_upload_btn);
          p_upload_btn->setText(tr("Upload"));
          p_removeViedoFromList_btn = new QPushButton;cleaner->add(p_removeViedoFromList_btn);
          p_removeViedoFromList_btn->setText(tr("Remove"));

          p_buttons_hBL->addWidget(p_upload_btn);
          p_buttons_hBL->addWidget(p_removeViedoFromList_btn);
          p_buttons_hBL->addWidget(pbtnCancel);
     p_videoUploadList_LW = new ProjectListWidget;cleaner->add(p_videoUploadList_LW);
     p_videoUploadList_LW->setAcceptDrops(true);

     p_main_vBL->addWidget(p_videoUploadList_LW);
     p_main_vBL->addLayout(p_buttons_hBL);
  this->setLayout(p_main_vBL);

  QObject::connect(p_removeViedoFromList_btn,SIGNAL(clicked()),this,SLOT(removeUploadVideo()));
}
UploadVideoList::~UploadVideoList()
{
    if (cleaner!=0) delete cleaner; cleaner=0;
}


给你参考下,我删除ITEM的方法……
离线l_xin
只看该作者 4楼 发表于: 2009-09-07
忘了说了:
p_videoUploadList_LW = new ProjectListWidget 中ProjectListWidget是我自己继承、重写的一个QListWidget(加了几个方法而已,其他的和QListWidget一样)

仅供参考
离线iiiyyyhhhsss

只看该作者 5楼 发表于: 2009-09-07
好,研究研究。。。
离线jalor

只看该作者 6楼 发表于: 2009-09-07
有个词 “take ”不知道能不能解决你的问题……
望哪位高手解释下 take 和 removeI,add 和 inser 的差别,我一直很迷糊……

我在用QTreeWidget,
想实现 添加一个子 item 时,怎样判断是否有他的上一层属性的TopLevelItem存在?
比如,我要添加“王五”因为他是北京人,我得先在QTreeWidget判断是否有个名为“北京”的TopLevelItem
如果没有我将创建,有我就往那个TopLevelItem里面 addChild。

哪位大虾能告诉我怎样判断?
离线l_xin
只看该作者 7楼 发表于: 2009-09-07
其实我也不大明白,不过takeItem 后,如果这个Item不用的话,还要delete掉……
离线iiiyyyhhhsss

只看该作者 8楼 发表于: 2009-09-07
我个人觉得要删除和增加QListWidget的Item,始终是要弄明白addItem()和removeItem是怎么用的。。。

因为这两个函数设计出来,本来就是针对这个添加和删除的。。。但却偏偏如此难以使用。。。。
离线iiiyyyhhhsss

只看该作者 9楼 发表于: 2009-09-07
离线iiiyyyhhhsss

只看该作者 10楼 发表于: 2009-09-07
http://www.qtcn.org/bbs/read.php?tid=13758

根据这里说,removeItemWidget()已经废弃。。。用takeItem
离线durrenty
只看该作者 11楼 发表于: 2009-12-11
L_xin    谢谢!
QT
离线daily8321

只看该作者 12楼 发表于: 2009-12-11
参看 QList<QTreeWidgetItem *>    findItems ( const QString & text, Qt::MatchFlags flags, int column = 0 ) const
离线jwchen08
只看该作者 13楼 发表于: 2011-03-29
我也遇到了这个问题,用takeItem可以删除,但是总会出现删除的不是选中那一个
离线smileforu
只看该作者 14楼 发表于: 2011-05-27
Re:

顶一下!!!!
快速回复
限100 字节
 
上一个 下一个