qt - 如何使用 qt 样式表仅自定义部分 qwidget 边框?
问题描述
我想用样式表制作qwidget边框,看起来像一个括号,可以用纯样式表完成吗?
我的参考是 qt stylesheet doc,但不知道如何自定义它以像屏幕截图一样。
这是我所能得到的,只显示左右边框。
QWidget{
border : 1px solid red;
border-width: 0px 1px;
}
解决方案
问题中屏幕截图中的示例只能使用图像 AFAIK 来实现,即使在具有完整 CSS 支持的 Web 浏览器中也是如此。使用 Qt,您实际上有 3 个选项可以在小部件后面/周围使用自定义图像。
惠特: background-image
, border-image
, 和image
:
https://doc.qt.io/qt-5/stylesheet-customizing.html
这里已经有一个使用示例border-image
:https ://doc.qt.io/qt-5/stylesheet-examples.html#qpushbutton-and-images
我个人喜欢 SVG,所以这里有一个我快速制作的示例。这是使用该image
属性覆盖括号的透明、可缩放 SVG。(请注意,要使 CSS 甚至应用于按钮,可能需要像我在示例中那样覆盖本机边框。)
// Requires Qt svg module, as in `QT += svg`.
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDialog d;
d.setLayout(new QVBoxLayout);
QToolBar* tb = new QToolBar(&d);
tb->setIconSize(QSize(48, 48));
d.layout()->addWidget(tb);
QIcon icon("./so-icon.svg");
for (int i=0; i < 4; ++i)
tb->addAction(icon, QStringLiteral("Action %1").arg(i));
QToolButton *btn = qobject_cast<QToolButton*>(tb->widgetForAction(tb->actions().at(1)));
btn->setStyleSheet(QStringLiteral(
"QToolButton {"
"border: none;" // to override some styles like WindowsVista and Macintosh
"image: url(./brackets.svg);"
"}"
));
return d.exec();
}
}
https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.svg
括号.svg
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
<path fill="#047F18" d="M12,44H4V4h8V0H0v48h12V44z"/>
<path fill="#047F18" d="M36,4h8v40h-8v4h12V0H36V4z"/>
</svg>
推荐阅读
- jquery - 在选择更改时,使用 jQuery 获取选定的值
- java - 在 Android Studio 中出现错误,“致命信号 6 (SIGABRT),tid 3796 中的代码 -6”我无法解决
- python - 如何使用 Google Sheets API 在数据透视表中按值“总计”排序
- java - 使用 JPA 升级 Spring Boot 2 无法实例化 [com.zaxxer.hikari.HikariDataSource]
- javascript - 如何简化嵌套的 setState();如何使对象通用?(太多不同的字段/状态键)
- branch - 如何使用 GraphQL 获取 GitHub 分支名称
- javascript - 在 API 调用上使用 Angular 6 创建动态更新图
- javascript - 如何从搜索结果中删除过去的数据并仅显示当前数据
- c - 为什么不调用 fgets?
- vba - 创建范围排除中间列