自定义可检查/可切换的QFrame小部件
Custom checkable / toggleble QFrame widget
如何使自定义小部件(派生自"QFrame")包含可检查/可切换的支持?如何使Qt的样式表(CSS)知道我的小部件被用户检查/切换?
是否需要在自定义小部件中使用某种信号或属性?
我不想使用(即)QPushButton,因为我需要我的按钮小部件来使用Qt的.ui文件。
即使用QPushButton时 - 事情很简单:
QPushButton#btnName:focus:pressed { border-image: url(ThemesPathKey/menu-top-h.png); }
QPushButton#btnName:checked { border-image: url(ThemesPathKey/menu-top-h.png); }
QPushButton#btnName:hover { border-image: url(ThemesPathKey/menu-top-h.png); }
我的自定义按钮小部件需要类似的东西。
谢谢。
您可以将 hover
和 focus
用于自定义微件,但仅按钮和复选框支持checked
。
要替换checked
可以使用自定义属性:
QPushButton#btnName[checked="true"] { border-image: url(ThemesPathKey/menu-top-h.png); }
单击小部件时,请像这样切换checked
属性:
void mousePressEvent(QMouseEvent*) override
{
bool checked = property("checked").toBool();
setProperty("checked", !checked);
style()->polish(this);
}
对于悬停,您可以对任何派生的小部件使用相同的方法:
class MyClass : public QFrame
{
<...>
}
MyClass a;
a.setStyleSheet("MyClassa:hover{<...>}"); //this will work
a.setStyleSheet("MyClass#a:hover{<...>}"); //and this will work
a.setStyleSheet("QFrame:hover{<...>}"); //Even this will work, too
检查/取消选中更为复杂。帧没有检查状态,因此您必须自己实现它。
class MyClass : public QFrame
{
public:
<...>
protected:
void mousePressEvent(QMouseEvent * e) override
{
checked_ = !checked_;
if(checked)
setStyleSheet("border:1px solid black;");
else
setStyleSheet("border:0px;");
}
bool checked_;
}
或类似的东西
class MyClass : public QFrame
{
public:
<...>
protected:
void paintEvent(QPaintEvent * e) override
{
if(checked)
{
//draw something
}
else
{
//draw something else
}
}
bool checked_;
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 最小硬币更换问题(自上而下方法)
- Qt VTK交互风格的信号到小部件
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 使用递归的数组的最小值.这是怎么回事
- 为什么在浮点中从大到小会引入更多的误差
- 找到两对数字,使它们的乘积的绝对差最小化
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 最大和最小 1 C++函数
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 如何将部分流作为参数传递
- 如何在QT中的自定义视频小工具t上绘制矩形
- 在二维数组中查找最小值和最大值?
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 如何找到大于整数的最小数字
- QFrame 不会根据父小部件的大小调整调整其大小
- C++ 创建小部件数组
- 自定义可检查/可切换的QFrame小部件