在我的应用程序中,我在前台有一张表。它有一个透明的背景,所以我可以通过它看到带有图像的标签。表格和标签的大小完全相同。
我希望在表格仍可查看时在标签上绘图,但不可用。由于标签是桌子后面的一层,我就是无法在它上画画,即使我禁用了桌子并禁用焦点。它仅在标签位于前景时才有效,但这意味着该表格不再可见。
我想在按下按钮后立即绘制:
void MainWindow::on_btn_draw_clicked()
{
fg_table->setFocusPolicy(Qt::NoFocus);
fg_table->setEnabled(false);
bg_label->setFocusPolicy(Qt::StrongFocus);
bg_label->setFocus();
}
然而哪个不起作用。该表已禁用且无法使用(这是正确的),但无法在bg_label
上绘图。
在Designer中,bg_label
是继承自QLabel的类“DrawLabel
”的占位符。在类中,绘图成为可能,我可以对各种鼠标事件做出反应。一切正常,理论上我可以画,但不是bg_label
是桌子背后的一层。
我知道您可以使用
升级/降低小部件的图层 bg_label->activateWindow();
bg_label->raise();
但这不是我想要的。不应该更改图层,我只想在bg_label
上的表格后面绘制。
有没有办法实现这个目标?我没有在任何地方看到类似的问题。
答案 0 :(得分:1)
fg_table
视觉上透明的事实无关紧要。简单的事实是fg_table
将接收所有鼠标事件。那些它不接受的东西将被传播给父母 - 不一定是看似在视觉上的小部件 - 即bg_label
。
假设前台表不需要与您可能使用的鼠标事件进行交互...
fg_table->setAttribute(Qt::WA_TransparentForMouseEvents);
应该导致所有鼠标事件转到bg_label
。