2014-09-22 90 views
1

我需要处理一个事件,在小部件完全可见后像show after事件一样被触发。但是我在Qt4中找不到像这样的事件。我已经尝试了下面提出的解决方案。但他们都没有工作。Qt4 qwidget显示事件后

我的目标:我正在研究一个嵌入式系统,我正在使用Qt for UI。我想要做的是在显示CustomWidget后在UI上显示硬件加速摄像头。如果我使用showEvent,则会在CustomWidget完全绘制之前显示相机。 似乎showEvent在小部件完全绘制之前触发。它的行为与之前的show事件相似。

故障1

bool CustomWidget::event(QEvent *event) 
{ 
    bool returnValue = QWidget::event(event); 
    if (event->type() == QEvent::Polish) 
    { 
     this->camera->show(); 
    } 
    return returnValue; 
} 

波兰事件称为一次。当我一次又一次隐藏并显示小部件时,它从未解雇。

故障2

void CustomWidget::showEvent(QShowEvent *event) 
{ 
    QWidget::showEvent(event); 
    QTimer::singleShot(0, this, SLOT(dialogExec)); 
} 

void CustomWidget::dialogExec() 
{ 
    this->camera->show(); 
} 

这也不能工作。

故障3

void CustomWidget::paintEvent(QPaintEvent *event) 
{ 
    QWidget::paintEvent(event); 

    if(!this->camera->isVisible()) 
    { 
     this->camera->show(); 
    } 
} 

void CustomWidget::hideEvent(QHideEvent *event) 
{ 
    this->camera->hide(); 
} 

回答

0

QWidget保护了委员呼吁closeEvent(QCloseEvent* event)showEvent(QShowEvent* event)。也许你可以使用这些方法来管理相机。

+0

showevent不起作用。请阅读问题的第二段。如果不明确,请通知我,我会澄清我的陈述。 – haitaka 2014-09-22 13:06:38

+0

'camera'是否继承'QWidget'?是'相机'能够刷新自己?如果两个答案都是真的,也许你可以简单地增加'QTime :: singleShot'方法的偏移量。 – eferion 2014-09-22 13:53:21

+0

相机不会继承QWidget。这是一个基于gstreamer的课程。如果我增加QTime :: singleShot的偏移量,它肯定能解决我的问题。但这不是一个好的解决方案。我的应用程序中有很多小部件,在这些小部件之间切换需要不同的时间。所以我必须找到最耗时的开关操作,并将此值设置为singleShot方法的偏移量。这绝对不是一个好的解决方案。 – haitaka 2014-09-22 14:01:40