在 table 后面一层的标签上绘图
Drawing on a label that's a layer behind a table
在我的应用程序中,我在前台有一个 table。它有一个透明的背景,所以我可以透过它看到一个带有图像的标签。 table 和标签的大小完全相同。
我想在 table 仍然可见但不可用时在标签上绘图。由于标签位于 table 后面的一层,即使我禁用 table 并禁用焦点,我也无法在其上绘制。它仅在标签位于前景时有效,但这意味着 table 不再可见。
我想一按按钮就画:
void MainWindow::on_btn_draw_clicked()
{
fg_table->setFocusPolicy(Qt::NoFocus);
fg_table->setEnabled(false);
bg_label->setFocusPolicy(Qt::StrongFocus);
bg_label->setFocus();
}
但是这不起作用。 table 被禁用且不可用(这是正确的),但无法在 bg_label
上绘制。
在 Designer 中,bg_label
是 class 'DrawLabel
' 的占位符,它继承自 QLabel。在 class 中,绘图成为可能,我可以对各种鼠标事件做出反应。一切正常,理论上我可以画画,但如果 bg_label
是 table 后面的一层。
我知道您可以 raise/lower 小部件的图层
bg_label->activateWindow();
bg_label->raise();
但这不是我想要的。图层不应更改,我只想在 bg_label
上的 table 后面绘制。
有什么办法可以实现吗?我在任何地方都没有看到类似的问题。
fg_table
在视觉上是透明的这一事实无关紧要。简单的事实是 fg_table
将接收所有鼠标事件。它不接受的那些将被传播到父级——不一定是看起来在视觉下方的小部件——即 bg_label
.
假设前景table不需要与您可能使用的鼠标事件交互...
fg_table->setAttribute(Qt::WA_TransparentForMouseEvents);
应该 导致所有鼠标事件进入 bg_label
。
在我的应用程序中,我在前台有一个 table。它有一个透明的背景,所以我可以透过它看到一个带有图像的标签。 table 和标签的大小完全相同。
我想在 table 仍然可见但不可用时在标签上绘图。由于标签位于 table 后面的一层,即使我禁用 table 并禁用焦点,我也无法在其上绘制。它仅在标签位于前景时有效,但这意味着 table 不再可见。
我想一按按钮就画:
void MainWindow::on_btn_draw_clicked()
{
fg_table->setFocusPolicy(Qt::NoFocus);
fg_table->setEnabled(false);
bg_label->setFocusPolicy(Qt::StrongFocus);
bg_label->setFocus();
}
但是这不起作用。 table 被禁用且不可用(这是正确的),但无法在 bg_label
上绘制。
在 Designer 中,bg_label
是 class 'DrawLabel
' 的占位符,它继承自 QLabel。在 class 中,绘图成为可能,我可以对各种鼠标事件做出反应。一切正常,理论上我可以画画,但如果 bg_label
是 table 后面的一层。
我知道您可以 raise/lower 小部件的图层
bg_label->activateWindow();
bg_label->raise();
但这不是我想要的。图层不应更改,我只想在 bg_label
上的 table 后面绘制。
有什么办法可以实现吗?我在任何地方都没有看到类似的问题。
fg_table
在视觉上是透明的这一事实无关紧要。简单的事实是 fg_table
将接收所有鼠标事件。它不接受的那些将被传播到父级——不一定是看起来在视觉下方的小部件——即 bg_label
.
假设前景table不需要与您可能使用的鼠标事件交互...
fg_table->setAttribute(Qt::WA_TransparentForMouseEvents);
应该 导致所有鼠标事件进入 bg_label
。