如何用样式表设计Qt Widget的样式,而不是它的子控件
How do I style a Qt Widget not its children with stylesheets?
我有一个:
class Box : public QWidget
它有
this->setLayout(new QGridLayout(this));
我试着做:
this->setStyleSheet( "border-radius: 5px; "
"border: 1px solid black;"
"border: 2px groove gray;"
"background-color:blue;");
this->setStyleSheet( "QGridLayout{"
"background-color:blue;"
"border-radius: 5px; "
"border: 1px solid black;"
"border: 2px groove gray;"
"}"
);
this->setObjectName(QString("Box"));
this->setStyleSheet( "QWidget#Box {"
"background-color:blue;"
"border-radius: 5px; "
"border: 1px solid black;"
"border: 2px groove gray;"
"}"
);
但第一个只影响添加的项目,其他两个则不起任何作用。我希望盒子本身有圆角和边框(如何在行之间画线的奖励)。
如何让样式表影响Box小部件,而不是它的子部件?
更准确地说,我本可以使用:
QWidget#idName {
border: 1px solid grey;
}
或
Box {
border: 1px solid grey;
}
在我看来,后者更容易,因为它不需要使用id名称。
但这些不起作用的主要问题是,这被认为是一个自定义小部件,因此需要一个自定义绘制事件:
void Box::paintEvent(QPaintEvent *) {
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
这取自:自定义小部件的Qt样式表
您需要识别对象类和实例,就像在常规CSS中一样。
QWidget#BoxName
{
border-radius: 5px;
border: 1px solid black;
border: 2px groove gray;
}
这与这里的答案相同:获取Qt Widget的变量名(用于样式表)?
box->setStyleSheet(QString::fromUtf8("QWidget#boxn"
"{n"
" border-radius: 5px;n"
" border: 1px solid black;n"
" border: 2px groove gray;n"
"}n"
""));
您可以编写自定义setStylesheet
函数,默认情况下将对象地址设置为对象名称。例如在python中:
from PySide2 import QtWidgets
class MyWidget(QtWidgets.QFrame):
def setStylesheetOnlySelf(self, stylesheet: str) -> None:
objectName = self.objectName() if self.objectName() != "" else str(id(self))
self.setObjectName(objectName)
self.setStyleSheet("#%s {%s}" % (objectName, stylesheet))
app = QtWidgets.QApplication()
widget = MyWidget()
widget.setStylesheetOnlySelf("background: white")
widget.show()
app.exec_()
相关文章:
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- 如何更改窗体上所有控件的标题?[C++生成器]
- 双击更改 mfc 中列表控件中的行的颜色
- 派生的 wxPanel 控件如何访问其中包含 wxDialog 中的数据?
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- 如何在MFC中的静态文本控件上插入图标?
- 我的主窗口在创建时或单击更新区域时是否会收到编辑控件?
- 如何在Qt C++中向自定义控件添加属性?
- C/C++ 检测双击 TVItem 的常用控件
- 从C++标头中导入常量而不是硬编码它们:扩展 .net 控件?
- 控件不会在选择函数旁边移动
- MFC:我们能否扩展CEditView中存在的CEdit控件类行为
- 通过嵌入式 IWebBrowser2 控件中的链接打开 youtube 搜索失败
- 查找素数:错误:控件到达非void函数的末尾
- C++ 获取"控件可能会到达约翰逊-特罗特代码上的非空函数的末尾
- 代码样式:在 switch/if 语句的分支中重用控件表达式或控制变量
- 如何在调用 DDX_Control 之前更改使用 DDX_Control 初始化的控件 (CListBox) 的样式
- 如何用样式表设计Qt Widget的样式,而不是它的子控件