Qt建立自定义listWidgetItem 并将label置于其中 text自动换行及 实现widget随label换行适应增高

用QListWidget 做聊天室的对话框 想到了 那种气泡效果 绘制的画太麻烦

于是就写了自定义的QListWidgetItem去贴一个气泡

但是搜了网上 没有label中的text自动换行导致自定义的QListWidgetItem的widget适应增高的代码

于是自己写了一个 

Qt建立自定义listWidgetItem 并将label置于其中 text自动换行及 实现widget随label换行适应增高_第1张图片

    QString sender = QHostInfo::localHostName();
    QString buff = SendEdit->toPlainText();
    QListWidget  *RecvShowText = new QListWidget;
    widget = new QWidget;
    widget->setMaximumWidth(RecvShowText->width()-100);
    widget->setStyleSheet("QWidget{border:1px; "  //设置边框宽度
                        "border-style:solid;" //设置边框风格
               "border-color:black;"  //设置边框颜色
                        "background: red;}"); //设置widget背景色


    strlabel = new QLabel(widget);   
    strlabel->setText(tr("%1").arg(buff));   

    strlabel->adjustSize();
    //strlabel->setGeometry(QRect(0, 0, 329, 27*4));
    strlabel->setWordWrap(true);
    strlabel->setAlignment(Qt::AlignTop);

    strlabel->resize(widget->size());

//    RecvShowText->insertPlainText(sender+":"+buff+"\n");
    QListWidgetItem *newItem = new QListWidgetItem(RecvShowText);
    QListWidgetItem *txtItem = new QListWidgetItem(RecvShowText);
//    QStringList strList;
//    strList<setText(tr("%1:\t%2").arg(sender).arg(time));
//    txtItem->setText(tr("%1").arg(buff));
    RecvShowText->addItem(newItem);        
    RecvShowText->addItem(txtItem);


    RecvShowText->setItemWidget(txtItem,widget);
    linenum = (fontMetrics().width(strlabel->text()))/(RecvShowText->width()-100);
    //txtItem->setSizeHint(QSize(0,strlabel->rect().height()));

    //widght高度随label增长的算法
    int total_width = fontMetrics().width(strlabel->text());
    //int b = fontMetrics().height();
    int oneline_width = (RecvShowText->width()-100);
    int line_hight = total_width/oneline_width;
    if(total_widthsetSizeHint(QSize(0,total_hight));//--------------------------------------------------
    widget->show();

你可能感兴趣的:(Qt,C++,C)