将鼠标悬停在 Qt 中时更改 QLabel 的背景颜色
Change background color of QLabel when hovered in Qt
我在 5 行中有 4 个 QLabel,当我将鼠标悬停在任何 QLabel 上时,该行中的所有 QLabel 都需要更改背景颜色。
我是Qt的新手。我搜索了一下,发现如果我们制作 QLabel 的子类并使用鼠标事件,这是可能的。谁能解释一下如何做到这一点?
一种可能性:在每个 QLable 实例上安装一个事件过滤器:
for(auto label : this->labels){
label->installEventFilter(this);
}
然后覆盖此事件过滤器功能。你现在可以抓住来自任何QLabel的任何事件并更改背景:
bool MyWidget::eventFilter(QObject *watched, QEvent *event){
if(labels.contains((QLabel*)watched)){
if(event->type() == QEvent::Enter){
for(auto label: this->labels){
label->setStyleSheet("background-color: red");
}
}else if(event->type() == QEvent::Leave){
for(auto label: this->labels){
label->setStyleSheet("");
}
}
}
return false;
}
我使用鼠标进入和离开事件。如果将鼠标悬停在任何标签上,则所有标签的背景将变为红色。
如果您使用 QGridLayout
为所有 QLabel 意图安装事件过滤器:
QList<QLabel*> labels;
labels << this->findChildren<QLabel*>();
for(auto lable : labels){
lable->installEventFilter(this);
}
现在确定事件源的行并更改背景列中的所有小部件:
bool MyWidget::eventFilter(QObject *watched, QEvent *event){
if(event->type() == QEvent::Enter || event->type() == QEvent::Leave){
QLabel* label = static_cast<QLabel*>(watched);
int index = this->ui->gridLayout->indexOf(label);
// determine the row
int row, column, rowSpan, columnSpan;
this->ui->gridLayout->getItemPosition(index, &row, &column, &rowSpan, &columnSpan);
// for each elemet in row
for(column = 0 ; column < this->ui->gridLayout->columnCount() ; column++ ){
QLayoutItem* item = this->ui->gridLayout->itemAtPosition(row, column);
if(item == nullptr) continue;
QLabel* lable = dynamic_cast<QLabel*>(item->widget());
if(label == nullptr) continue;
lable->setStyleSheet(event->type() == QEvent::Enter ? "background-color: red" : "");
}
}
return false;
}
相关文章:
- 如何在全屏模式下(在OpenGL中)使背景透明
- 使用窗口中的QSlider更改背景音量
- 如何使用新运算符跟踪在循环中创建的 QLabel
- 除了构造函数之外,还创建 QLabel
- SDL2 透明背景
- 在 QLabel 中显示视频
- Qt GUI使用Qfiledialogbox和qlabel显示视频,这是我的代码
- 如何在C++中将自定义文本设置为 QLabel?
- 在 Visual C++ 中以编程方式更改按钮的背景图像
- 多重采样背景不显示
- 如何使用鼠标单击选择多个 QLabel 对象?
- 直接2D用WM_ERASEBKGND擦除背景?
- 在特定时间内更改 QLabel 的背景颜色
- 如何设置与其背景图像大小相对应的窗口大小?
- 更改包含 QButton 的 Qlayout 的背景颜色
- 如何为使用创建窗口创建的窗口创建自定义背景颜色
- QLabel,删除边框和背景
- 将鼠标悬停在 Qt 中时更改 QLabel 的背景颜色
- 在 qlabel 中将图像设置为背景并在其顶部设置文本
- 使背景的QLabel png图像透明的设计时间