1、前言
在C++ Qt编程中默认主窗口MainWindow底下自带控件QStatusbar,很多情况下都使用其显示程序的连接状态或开关状态,因为时常需要将图片设置为圆形显示,所以这里记录一下常用的设置的代码,方便以后复制粘贴。
2、封装设置状态的函数
(1)使用遮罩将图片设置成圆形
QPixmap Utils::createCircularPixmap(const QPixmap &src, int diameter)
{// 创建一个圆形的 QBitmapQBitmap mask(diameter, diameter);mask.fill(Qt::color0);QPainter painter(&mask);painter.setRenderHint(QPainter::Antialiasing);painter.setBrush(Qt::color1);painter.drawEllipse(0, 0, diameter, diameter);painter.end();// 创建一个新的 QPixmapQPixmap circularPixmap(diameter, diameter);circularPixmap.fill(Qt::transparent);painter.begin(&circularPixmap);painter.setRenderHint(QPainter::Antialiasing);QPainterPath pathTemp;pathTemp.addEllipse(0, 0, diameter, diameter);painter.setClipPath(pathTemp);painter.drawPixmap(0, 0, diameter, diameter, src);painter.end();// 应用圆形遮罩circularPixmap.setMask(mask);return circularPixmap;
}
(2)调整大小并显示在QStatusbar中
void Utils::statusbarSetPixmap(QStatusBar *statusbar, QString pixPath)
{QLabel *lastLabel = statusbar->findChild<QLabel *>(statusbar->objectName()+"_pixLabel");if(lastLabel != nullptr){delete lastLabel;}int statusbarSize = 30;//状态栏的大小,圆的直径?QLabel *imageLabel = new QLabel(/*qobject_cast<QWidget*>(*/statusbar/*->parent())*/);imageLabel->setFixedSize(statusbarSize, statusbarSize);imageLabel->setObjectName(statusbar->objectName()+"_pixLabel");QPixmap pixmap(pixPath);QPixmap pixmap2 = pixmap.scaled(statusbarSize, statusbarSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);imageLabel->setPixmap(Utils::createCircularPixmap(pixmap2, statusbarSize));statusbar->addWidget(imageLabel);
}
3、调用
举例两张图片:
调用,这里以http服务器是否开启为例子:
if(httpServerIsOpen){Utils::statusbarSetPixmap(ui->statusbar, httpTrueImg);//显示开启状态
}else{Utils::statusbarSetPixmap(ui->statusbar, httpFalseImg);//显示关闭状态
}
效果图: