Pregunta

He hecho un programa de prueba rápida que no parece traer nada cuando se ejecuta.Aquí está mi código:

z_lock.h

#ifndef Z_LOCK_H
#define Z_LOCK_H

#include <QtGui>

class z_lock : public QMainWindow
{
Q_OBJECT
public:
    z_lock();
private slots:
    void password_check();
    void quit();
private:
    QStackedWidget *book;
    QWidget *page1;
    QWidget *page2;
    QLineEdit *input;
};
#endif

z_lock.cpp

#include "z_lock.h"

z_lock::z_lock(){
    book = new QStackedWidget;

    //page1
    page1 = new QWidget;
    QLabel *label1 = new QLabel("Enter password.");
    input = new QLineEdit;
    QPushButton *goButton = new QPushButton("Go");

    connect(goButton, SIGNAL(clicked()), this, SLOT(password_check()));

    QHBoxLayout *layout1;
    layout1 -> addWidget(label1);
    layout1 -> addWidget(input);
    layout1 -> addWidget(goButton);
    page1 -> setLayout(layout1);

    //page2
    page2 = new QWidget;
    QLabel *label2 = new QLabel("Welcome, you're in.");
    QVBoxLayout *layout2;
    layout2 -> addWidget(label2);
    page2 -> setLayout(layout2);

    book -> addWidget(page1);
    book -> addWidget(page2);
    setCentralWidget(book);
}

void z_lock::quit(){
    close();
}

void z_lock::password_check(){
    QString guess = input -> text();
    if (guess == "apple"){
        z_lock::book -> setCurrentIndex(1);
    }
}

main.cpp

#include "z_lock.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    z_lock *that;
    that -> show();

    return app.exec();
}

Por favor, cualquier ayuda sería hacer.He llevado a cabo investigaciones acerca de todo lo relacionado con QMainWindow y todavía nada.Esto probablemente será estúpidamente fácil de resolver y lo siento por tal una pregunta básica.

¿Fue útil?

Solución

Usted tiene varios problemas en su código...Vamos a empezar con el más importante:

  • Usted está asignando el objeto en su main.cpp en el montón que es un tipo de problema en sí mismo, pero incluso si usted hace esto, usted debe utilizar el new la palabra clave para que en C++.

  • Dicho esto, usted realmente no debe asignar aquí en el montón:parcialmente porque sería una pérdida de la memoria, pero lo más importante es que no hay necesidad de ello.

Por lo tanto, reemplazar estas líneas:

z_lock *that;
that -> show();

con simplemente esto:

 z_lock that;
 that.show();

Esto es más o menos el mismo problema para que tus diseños aquí:

QHBoxLayout *layout1;
QVBoxLayout *layout2;

Por favor, cambie a:

QHBoxLayout *layout1 = new QHBoxLayout;
QVBoxLayout *layout2 = new QVBoxLayout;

Además, no se debe incluir toda la QtGui módulo como este:

#include <QtGui>

Sólo se incluyen las clases que eventualmente necesitas.Aunque esto es en algunos Qt 4 libro, esta es una mala práctica.

Este método también es inútil en el código, ya que no hace nada excepto la envoltura de la ranura existente:

void z_lock::quit(){
    close();
}

También, es posible que desee utilizar el tr() método para este tipo de cosas para obtener la traducción para otros idiomas:

 QLabel *label1 = new QLabel("Enter password.");

Otros consejos

z_lock *that;
that -> show();

El problema es that es un puntero sin inicializar.No apuntan a una válida z_lock ejemplo para llamar a los métodos de.

Lo que usted necesita hacer destinar y la construcción de una z_lock instancia con new:

z_lock* that = new z_lock;
that->show();

O, más simplemente, cambiar a la asignación de pila:

z_lock that;
that.show();

Lo mismo se aplica para el "diseño" de las variables en el z_lock constructor.

Este es un ejemplo de por qué es una buena idea para compilar en un alto nivel de advertencia y corrección de las advertencias.El compilador puede notar fácilmente y señalar el uso no válido de variables no inicializadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top