【Qt】常用小功能实现

QLabel设置背景透明

label->setStyleSheet("QLabel {background-color: transparent;}");

Qt加载GIF图

示例代码

QLabel* label = new QLabel();
label->resize(100, 100);
label->setStyleSheet("background:#000000;"); //黑底,可以对比明显一点。
QMovie* movie = new QMovie(":/resource/loading/loading.gif");
label->setMovie(movie);
movie->start();
label->show();

给定svg图片,转化为QPixmap

QPixmap GetPixmapFromSvgPath(const QString& svgPath, QSize size)
{
    QSvgRenderer svg_render(svgPath);
    QPixmap pixmap(size);
    pixmap.fill(Qt::transparent);
    QPainter painter(&pixmap);
    svg_render.render(&painter);
    return pixmap;
}

给定svg图片,转化为QIcon

QIcon GetIconFromSvgPath(const QString& svgPath, QSize size)
{
    QSvgRenderer svg_render(svgPath);
    QPixmap pixmap(size);
    pixmap.fill(Qt::transparent);
    QPainter painter(&pixmap);
    svg_render.render(&painter);
    QIcon ico(pixmap);
    return ico;
}

Qt弹出灰色半透明的子窗口,使子窗口上也按不了

QWidget* widget = new QWidget(this, Qt::FramelessWindowHint);
widget->resize(this->size());
widget->setStyleSheet("QWidget{background-color:rgba(10,10,10,100);}"); //设置原来的主界面为灰色,通过覆盖原来,展示透明度实现。
widget->show();

Qt实现登录加载GIF效果,登录时原来窗口灰色处理

QLabel* label = new QLabel(this, Qt::FramelessWindowHint); // 阻塞原来界面
label->resize(this->size());
label->setStyleSheet("QWidget{background-color:rgba(10,10,10,100);}"); //设置原来的主界面为灰色,通过覆盖原来,展示透明度实现。
QMovie* movie = new QMovie(":/resource/loading/loading.gif");
movie->setScaledSize(label->size() / 2); //设置gif大小
label->setMovie(movie);
label->setAlignment(Qt::AlignCenter); // gif居中
movie->start();
label->show();

Qt清空QListWidget项,不清理自定义QWidget

while (ui->listWidget_items->count() > 0) {
    auto item = ui->listWidget_items->takeItem(0);
    delete item;
}

QPainter绘制边框

QPainter painter(this);
QPen pen;
pen.setColor(Qt::darkGray);
pen.setWidth(2); // 画笔宽度
painter.setPen(pen);
painter.drawRect(this->rect());
painter.end();

QLineEdit自定义右键菜单栏选项

// 1. 设置QLineEdit的属性,右键时展示自定义的QAction
lineEdit->setContextMenuPolicy(Qt::ActionsContextMenu);
// 2. 添加自定义QAction
QAction* action= new QAction("xxxxx.png");
lineEdit->addAction(action);

Qt拷贝内容到粘贴板,或从粘贴板获取内容

QString source        = ui->textEdit_code->toPlainText();   // 要拷贝的内容
QClipboard *clipboard = QApplication::clipboard();   //获取系统剪贴板指针
QString originalText  = clipboard->text();            //获取剪贴板上文本信息
clipboard->setText(source);     

Qt自定义实现无边框窗口,以及自定义最大化、最小化和关闭按钮 等功能的一个思路

找到了一个博主博客,实现的思路非常好,通过三层QWidget实现:Qt实战6.万能的无边框窗口(FramelessWindow) - Qt小罗 - 博客园 (cnblogs.com)


Qt无边框拖动

有个参考博客:(18条消息) QT 实现无边框拖动_lwwl12的博客-CSDN博客_qt无边框窗口拖动

里面是设置无边框Qt::FramelessWindowHint之后,通过重写三个函数mouseReleaseEventmousePressEventmouseMoveEvent,实现跟随鼠标拖动的效果。


Qt中QProgressBar设置进度条颜色

proBar = new QProgressBar(this);
proBar->setStyleSheet("QProgressBar{background:white;} QProgressBar::chunk{background:blue}");

QProgressBar初始自带滚动效果

ui->progressBar_download->setMaximum(0); // 通过设置最大为0,可以实现滑动框滚动的动画效果。

QTreeWidget中QTreeWidgetItem前添加复选框

参考:[QTreeWidget中的复选框使用 - 辉常的D调 - 博客园 (cnblogs.com)](https://www.cnblogs.com/doubleeleven/articles/3894250.html#:~:text=QTreeWidget中的复选框使用 在树形结构中有时候需要在每项前添加复选框,能够进行勾选,复选框的添加可以使用tree本身的属性就行 voidQTreeWidgetItem%3A%3AsetCheckState (,intcolumn%2C Qt%3A%3ACheckState state ))

QTreeWidgetItem* item = new QTreeWidgetItem(widget);
item->setCheckState(0, Qt::CheckState::Unchecked);//设置复选框

当点击复选框时,QTreeWidget会发射信号itemClickeditemChanged信号,这里我们使用itemClicked信号,而不能使用itemChanged

因为itemChanged,当我们在改变项目复选框时,也会回调,这样循环回调,容易出问题。

void itemClicked(QTreeWidgetItem* item, int column);
posted @ 2023-01-13 13:12  声音~  阅读(209)  评论(0编辑  收藏  举报