es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo ir a un número de página específico en QWizard?

Qt 5, QWizard

¡Hola! He revisado algunas respuestas sobre ese tema pero aún no puedo entenderlo del todo. Aquí está la idea que quiero hacer:

Quiero crear un grupo de botones para navegar entre las páginas de QWizard.

Por ejemplo, en la parte superior de mi QWizard tengo:

enter image description here

Al hacer clic en un botón, obtengo un id, que es el mismo que el id de las páginas, y quiero mostrar al usuario la página con ese id.

Intento llamar a:

this->page(pageId)->show(); 

¡Por supuesto, no es correcto! Veo addPage(), page() y pageAdded(). pero no tiene un método para establecerlo.

Por supuesto, puedo analizar mi id, obtener el número de página actual y llamar al método this->back(); o next, pero tal vez haya un método más sencillo que no conozco?

void StartupWizard::OnPageNumMove(int pageIdToMove)
{
    if(currentId()==pageIdToMove)
    {
        return;
    }
    else
    {
        if(currentId()<pageIdToMove)
        {
            while (pageIdToMove!=currentId())
            {
                this->next();
            }
        }
        else
        {
            while (pageIdToMove!=currentId())
            {
                this->back();
            }
        }
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Para crear un grupo de botones para navegar entre las páginas de un QWizard, puedes usar QButtonGroup y conectar su señal buttonClicked() a una ranura personalizada. En la ranura personalizada, puedes obtener el ID del botón que se ha pulsado y utilizarlo para mostrar la página de asistente correspondiente.

    Aquí tienes un ejemplo de cómo hacerlo:

    // Crear el grupo de botones
    QButtonGroup *grupoBotones = new QButtonGroup(this);
    
    // Añadir botones al grupo de botones
    QPushButton *boton1 = new QPushButton("Página 1", this);
    QPushButton *boton2 = new QPushButton("Página 2", this);
    QPushButton *boton3 = new QPushButton("Página 3", this);
    grupoBotones->addButton(boton1, 1);
    grupoBotones->addButton(boton2, 2);
    grupoBotones->addButton(boton3, 3);
    
    // Conectar la señal buttonClicked a una ranura personalizada
    connect(grupoBotones, SIGNAL(buttonClicked(int)), this, SLOT(mostrarPaginaAsistente(int)));
    
    // Definir la ranura personalizada para mostrar la página de asistente con el ID dado
    void AsistenteInicio::mostrarPaginaAsistente(int idPagina)
    {
        if (idPagina <= 0 || idPagina > numeroPaginas())
            return;
    
        if (idPagina == idActual())
            return;
    
        if (idPagina > idActual())
        {
            while (idPagina != idActual())
                siguiente();
        }
        else
        {
            while (idPagina != idActual())
                anterior();
        }
    }
    

    En este código, primero creamos un QButtonGroup y añadimos algunos botones a él. Cada botón está asociado a un ID de página, que pasamos a la función addButton().

    A continuación, conectamos la señal buttonClicked() del QButtonGroup a una ranura personalizada llamada mostrarPaginaAsistente(). Esta ranura recibe el ID del botón pulsado como argumento.

    Dentro de la ranura mostrarPaginaAsistente(), primero comprobamos si el ID de la página es válido (es decir, no es negativo y no es mayor que el número total de páginas). Si el ID no es válido, salimos de la función sin hacer nada.

    Después, comprobamos si el botón pulsado corresponde a la página actual del asistente. Si es así, salimos de la función sin hacer nada.

    Si el botón pulsado corresponde a una página que está después de la página actual, llamamos a la función siguiente() repetidamente hasta llegar a la página deseada. Si el botón pulsado corresponde a una página que está antes de la página actual, llamamos a la función anterior() repetidamente hasta llegar a la página deseada.

    De esta manera, cuando el usuario pulsa uno de los botones del grupo de botones, se muestra la página de asistente con el ID correspondiente.

Comments are closed.