QListWidget添加自定义的widget实现筛选其中widget功能
自定义了一个ColorLineLogUnitWidget 由icon 和text构成
在这个widget中 有这么一个方法 传入icon text 和颜色
void ColorLineLogUnitWidget::setContentText(QPixmap icon,QString text,QColor color){
QSize size = ui->label_icon->size();
ui->label_icon->setPixmap(icon.scaled(size));
ui->label_content->setText(text);
QString time= QTime::currentTime().toString("HH:mm:ss.zzz");
ui->label_time->setText(time);
QPalette pl;
pl.setColor(QPalette::Text,color);
ui->label_content->setPalette(pl);
}
在主widget中 写一个点击事件 每次点击都添加一个ColorLineLogUnitWidget
//保存这个widget 的level 以便后面排序时候取到这个level来区分
widget->SetLevel(level);
widget->setContentText(icon, text, color);
QListWidgetItem * item = new QListWidgetItem(ui->listWidget);
item->setSizeHint(QSize(100, 30));
ui->listWidget->setItemWidget(item, widget);
在ColorLineLogUnitWidget 中 添加get 和set 获取添加widget的level
void ColorLineLogUnitWidget::SetLevel(int level)
{
this->level = level;
}
int ColorLineLogUnitWidget::GetLevel()
{
return level;
}
在主widget中 添加一个筛选方法 根据筛选level 之后再其他地方写个switch case筛选一下 比如在combox IndexChanged的时候
void ColorLineLogWidget::SelectColorLineLogLevel(int level)
{
if (level == 0) {
return;
}
int count = ui->listWidget->count();
for (int i = 0; i < count; i++)
{
int Itemlevel = ((ColorLineLogUnitWidget *)ui->listWidget->itemWidget(ui->listWidget->item(i)))->GetLevel();//遍历获取每一个
if (Itemlevel != level)
{
ui->listWidget->setRowHidden(i, true);
}
}
ui->pushButton_append->setEnabled(false);
}
大概效果是这样 用上面的conbox筛选不同等级的log 这里只给了大概思路