QListWidget 删除item

KimTian.HPU 2016-12-02 02:02:03
做一个下拉框,根据下拉框的值(index,最大10),在listWidget中放相应组数的widget

(class myWidget: public QWidget;)

QListWidgetItem *listWidgetItem = new QListWidgetItem[10]
myWidget *m_myWidget = new myWidget[10];
int iCurrentCnt = ui.listWidget->count();//数界面当前有多少组
if(iCurrentCnt==index)
return;
else if(iCurrentCnt<index)//当前小于下拉框的值,添加
{
for(int i=iCurrentCnt;i<index;i++)
{
ui.listWidget->addItem(&listWidgetItem[i]);
ui.listWidget->setItemWidget(&listWidgetItem[i],&m_myWidget[i]);
}
}
else if(iCurrentCnt>index)//当前大于下拉框的值,删除
{
for(int i=iCurrentCnt;i>index;i--)
{
ui.listWidget->takeItem(i);
}
}


比如原来值为0,下拉框值改为3,listWidget会有3组。
但是把3减小为2,仍然是3组。
再减小为1,就崩溃了。如下图:

...全文
680 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
易日 2016-12-02
  • 打赏
  • 举报
回复
我也不懂,知道了和我说说呀
KimTian.HPU 2016-12-02
  • 打赏
  • 举报
回复
引用 2 楼 u012830675 的回复:
按照你说的有个下拉列表,通过选择下拉列表的值index,使ListWidget有index行。 代码和你的差不多,不过在退出程序时候报了和你一样的错。 错误点在QListWidgetItem *listWidgetItem = new QListWidgetItem[10](new10个item,我不知道这样是不是这个意思)。 我改成
for(int i=0; i<10; i++)
    {
        item[i] = new QListWidgetItem;
    }
就好了,没报错了。
是的,是10个item 。也是这么解决的:

QListWidgetItem *listWidgetItem[10];
for(int i =0;i<10;i++)
{
    listWidgetItem[i] = new listWidgetItem;
}
在思考为什么??????????? 请指点,多谢
易日 2016-12-02
  • 打赏
  • 举报
回复
这是我写的代码,初学
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
//    item = new QListWidgetItem[10];
    for(int i=0; i<10; i++)
    {
        item[i] = new QListWidgetItem;
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_comboBox_activated(int index)
{
    int count = ui->listWidget->count();
    index++;
    qDebug() << "count:" << count << " | intex:" << index;
    if(index > count)
    {
        for(int i=count; i<index; i++)
        {
            ui->listWidget->addItem(item[i]);
            ui->listWidget->item(i)->setText(QString::number(i+1));
        }
    }
    if(index < count)
    {
        for(int i=count; i>index; i--)
        {
            ui->listWidget->takeItem(i-1);
        }
    }
}
易日 2016-12-02
  • 打赏
  • 举报
回复
按照你说的有个下拉列表,通过选择下拉列表的值index,使ListWidget有index行。 代码和你的差不多,不过在退出程序时候报了和你一样的错。 错误点在QListWidgetItem *listWidgetItem = new QListWidgetItem[10](new10个item,我不知道这样是不是这个意思)。 我改成
for(int i=0; i<10; i++)
    {
        item[i] = new QListWidgetItem;
    }
就好了,没报错了。
赵4老师 2016-12-02
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧