在作为表后面图层的标签上绘图



在我的应用程序中,我在前台有一个表。它有一个透明的背景,所以我可以通过它看到一个带有图像的标签。表和标签的大小完全相同。

我想在表格仍然可见但不可用时在标签上绘制。由于标签是表格后面的一层,因此即使我禁用表格并禁用焦点,我也无法在其上绘制。仅当标签位于前台时,它才有效,这意味着该表不再可见。

我想一按按钮就画画:

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上绘制。

在设计器中,bg_label是继承自QLabel的类'DrawLabel'的占位符。在课堂上绘画是可能的,我可以对各种鼠标事件做出反应。一切正常,理论上我可以画画,但如果bg_label是桌子后面的一层,就不能画了。

我知道您可以使用以下方法升高/降低小部件的层

bg_label->activateWindow();
bg_label->raise();

但这不是我想要的。图层不应该改变,我只想在桌子后面画bg_label.

有什么办法可以做到这一点吗?我在任何地方都没有看到类似的问题。

fg_table在视觉上是透明的这一事实是无关紧要的。 简单的事实是,fg_table将接收所有鼠标事件。 那些它不接受的将被传播到父级 - 不一定是视觉上看起来在下面的小部件 - 即bg_label.

假设前台表不需要与鼠标事件交互,您可能会使用...

fg_table->setAttribute(Qt::WA_TransparentForMouseEvents);

应该导致所有鼠标事件都bg_label

最新更新