Boas práticas: Passando parâmetro para novo Dialog



  • Olá, sou novo no forum e programador amador.

    Imagine que eu queira passar um parâmetro (QVector<QPoint>, por exemplo) para uma nova janela que será aberta (Dialog, por exemplo).
    Assumindo que eu criei este Dialog pelo Qt Designer, eu tenho o ".h" e o ".cpp" associado.

    Minha abordagem principal foi acrescentar mais um parâmetro na construtora deste Dialog, além do parent:
    @
    QDialog::construtora(QWidget *parent = 0, QVector<QPoint> *vetor = 0)
    @

    Eu tentei de outras formas, mas quando chegava na construtora ele me dava um erro dizendo que precisava haver um valor padrão "=0". Quando eu declarava sem ser ponteiro eu não consegui fazer funcionar de forma alguma.

    A declaração como ponteiro, fazendo o padrão = NULL é a melhor forma de passar um parâmetro para um Dialog?



  • Olá,

    Na verdade NULL é definido como 0(zero) para C/C++ nos padrões antigos. No novo padrão C++11 um ponteiro nulo é definido como nullptr (ver std::nullptr_t).
    Acostume a usar sempre QWidget *parent=0 no final da declaração.

    @QDialog::construtora(QVector<QPoint> *vetor = 0, QWidget *parent = 0)@

    E

    @QDialog::construtora(QVector<QPoint> *vetor = NULL, QWidget *parent = NULL)@

    são a mesma coisa.



  • Acredito que a forma mais elegante é sim, passar via construtor. Você também poderia criar um atributo de classe do tipo:
    @QVector<QPoint> *vetor@
    E criar um método set para setar um valor.

    Não entendi o que você quis dizer com chamar como ponteiro. Você pode passar parâmetros para o construtor mesmo instanciando na stack (sem ponteiro).

    @MyDialog::MyDialog(QWidget *parent = 0, QVector<QPoint> *vetor = 0) // Construtor

    MyDialog mydialog(parametro1, parametro2) // Instanciando na stack@

    Não sei bem se é isso que você queria.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.