QString friendNickname = friendname.at(i); QString friendImagePath = AccountInfo::getImagePathByName(friendNickname); // 根据好友昵称获取头像路径 QString friendID = AccountInfo::getIDByName(friendNickname); // 根据好友昵称获取账号ID QListWidgetItem *item = new QListWidgetItem(ui->listWidget_2); QWidget *widget = new QWidget(ui->listWidget_2); QHBoxLayout *layout = new QHBoxLayout(widget); ClickableLabel *friendImageLabel = new ClickableLabel(friendNickname,friendID,widget); friendImageLabel->setPixmap(QPixmap(friendImagePath).scaled(64, 64)); QLabel *friendNameLabel = new QLabel(friendNickname, widget); layout->addWidget(friendImageLabel); layout->addWidget(friendNameLabel); widget->setLayout(layout); item->setSizeHint(widget->sizeHint()); ui->listWidget_2->setItemWidget(item, widget); connect(friendImageLabel, SIGNAL(labelClicked(QString)), this, SLOT(friendImageClicked(QString))); 修改以上代码,使显示的好友头像变为圆形,并减小列表项的高度
时间: 2024-04-14 08:27:42 浏览: 149
testQString2.zip
要实现显示圆形的好友头像并减小列表项的高度,你可以按照以下步骤修改代码:
1. 在 `ClickableLabel` 类中添加一个成员变量 `QPixmap` 类型的 `roundImage`,用于存储圆形头像。
```cpp
private:
QPixmap roundImage;
```
2. 修改 `ClickableLabel` 类的构造函数,添加一个参数用于传入头像路径。
```cpp
ClickableLabel(const QString& nickname, const QString& id, QWidget* parent = nullptr, const QString& imagePath = "");
```
3. 在 `ClickableLabel` 类的构造函数中,加载原始头像并将其转换为圆形头像。
```cpp
QString roundImagePath = AccountInfo::getRoundImagePathByName(friendNickname); // 根据好友昵称获取圆形头像路径
roundImage = QPixmap(roundImagePath).scaled(64, 64).transformed(QTransform().scale(1, -1)); // 加载并转换为圆形头像
```
4. 修改 `ClickableLabel` 类的 `paintEvent()` 函数,绘制圆形头像。
```cpp
void ClickableLabel::paintEvent(QPaintEvent* event) {
QLabel::paintEvent(event);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true); // 抗锯齿
painter.setRenderHint(QPainter::SmoothPixmapTransform, true); // 平滑绘制
// 绘制圆形头像
painter.setClipPath(roundPath); // 设置剪裁路径为圆形
painter.drawPixmap(0, 0, width(), height(), roundImage); // 绘制圆形头像
}
```
5. 修改 `ClickableLabel` 类的 `resizeEvent()` 函数,更新圆形头像的剪裁路径。
```cpp
void ClickableLabel::resizeEvent(QResizeEvent* event) {
QLabel::resizeEvent(event);
// 更新圆形头像的剪裁路径
roundPath.addEllipse(rect());
}
```
6. 在 `friendImageLabel` 对象的构造函数中,将头像路径传递给 `ClickableLabel` 构造函数。
```cpp
ClickableLabel* friendImageLabel = new ClickableLabel(friendNickname, friendID, widget, friendImagePath);
```
7. 修改 `item` 对象的高度以减小列表项的高度。
```cpp
item->setSizeHint(QSize(widget->sizeHint().width(), 80));
```
通过以上步骤的修改,你可以实现显示圆形的好友头像并减小列表项的高度。
阅读全文