我做了一个快速的测试程序,它在执行时似乎什么都不提。这是我的代码:
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;
};
#endifz_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();
}拜托,任何帮助都行。我做过与QMainWindow有关的所有事情的研究,但仍然什么也没有做。这可能是愚蠢的容易解决,我很抱歉,这样一个基本的问题。
发布于 2014-06-03 16:23:53
你的代码有几个问题..。让我们从最重要的开始:
new关键字。因此,将这些行替换为:
z_lock *that;
that -> show();简单地说:
z_lock that;
that.show();对于这里的布局来说,这也是同样的问题:
QHBoxLayout *layout1;
QVBoxLayout *layout2;请将其改为:
QHBoxLayout *layout1 = new QHBoxLayout;
QVBoxLayout *layout2 = new QVBoxLayout;此外,您不应该像这样包括整个QtGui模块:
#include <QtGui>只需包括你最终需要的类。尽管这是在一些Qt 4的书,这是不好的做法。
这个方法在您的代码中也是无用的,因为它除了包装现有的插槽之外什么也不做:
void z_lock::quit(){
close();
}此外,您可能希望使用tr()方法来获得其他语言的翻译:
QLabel *label1 = new QLabel("Enter password.");发布于 2014-06-03 16:15:32
z_lock *that;
that -> show();问题是that是一个未初始化的指针。它没有指向要调用方法的有效z_lock实例。
您需要使用z_lock分配和构造一个new实例。
z_lock* that = new z_lock;
that->show();或者,更简单地说,切换到堆栈分配:
z_lock that;
that.show();这同样适用于z_lock构造函数中的“布局”变量。
这是一个例子,说明为什么在高警告级别编译并修复警告是个好主意。编译器可以很容易地注意到并指出未初始化变量的无效使用。
https://stackoverflow.com/questions/24019969
复制相似问题