QMainWindow no se muestran
-
21-12-2019 - |
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.
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.