Что нужно для того, чтобы showEvent()
был вызван в производном классе QWidget
?Как сделать showEvent() вызванным?
ConfigMenuForm.h
//simplified the code of the class declaration
class ConfigMenuForm : public QWidget
{
Q_OBJECT
public:
explicit ConfigMenuForm(QWidget *parent = 0);
~ConfigMenuForm();
signals:
public slots:
private slots:
protected:
void showEvent(QShowEvent *event) override; //with or without the override keyword, no change
private:
}
ConfigMenuForm.cpp
//amongst others
void ConfigMenuForm::showEvent(QShowEvent * event)
{
//do some stuff here - really simple
}
Я не могу это срабатывает, когда я show()
мой виджет ... Я не имею в виду код не имеет эффект и при размещении точки останова он не останавливается на нем, поэтому я предполагаю, что событие не срабатывает.
Что я делаю неправильно?
EDIT - добавить еще немного кода и точность:
Я использую QtCreator 3.0.0 с Qt 5.2.0 (MSVC 2010, 32 бит)
//creating the widget in the main window's constructor (class Viewer)
// ConfigMenuForm calls hide() in its own constructor
m_configMenuForm = new ConfigMenuForm(this);
тогда, когда я нажимаю кнопку в главном окне
void Viewer::ontBConfigClicked()
{
m_configMenuForm->show();
}
что меня смущает то, что на самом деле m_configMenuForm
показан на верхней части главного окна, он становится видимым и правильно работает! Просто showEvent не вызывается.
Как вы называете это шоу 'show'? –
Чтобы вызвать 'showEvent', вам просто нужно сделать то, что вы * сказали * вы сделали. Вот [минимальный пример] (http://pastebin.com/3FCjuS990). Если вы тестируете, поставив точку прерывания, возможно, вы не подключили отладчик к вашему приложению. если вы используете Qt Creator, вам нужно использовать кнопку «Начать отладки» 'F5' (а не кнопку« Запустить »' ctrl + R'). – Mike
@Jonathan Mee: прямое вызов слота 'show()' от другого виджета, владеющего этим виджетами – RDK