QMainWindow not showing up
QMainWindow not showing up
我制作了一个快速测试程序,它在执行时似乎不会显示任何内容。这是我的代码:
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();
}
求你了,任何帮助都可以。我已经对与QMainWindow有关的一切进行了研究,但仍然一无所获。这可能很容易解决,我对这样一个基本的问题感到抱歉。
您的代码中有几个问题。。。让我们从最重要的开始:
-
您在堆上的main.cpp中分配对象,这本身就是一个问题,但即使这样做,也应该在C++中使用
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>
只要包括你最终需要的课程。尽管这是在一些Qt4的书中,但这是一种糟糕的做法。
这个方法在你的代码中也是无用的,因为它除了包装现有的插槽之外什么都不做:
void z_lock::quit(){
close();
}
此外,您可能希望使用tr()
方法来翻译其他语言:
QLabel *label1 = new QLabel("Enter password.");
z_lock *that;
that -> show();
问题是that
是一个未初始化的指针。它没有指向一个有效的z_lock
实例供您在.上调用方法
您需要使用new
:分配和构造一个z_lock
实例
z_lock* that = new z_lock;
that->show();
或者,更简单地说,切换到堆栈分配:
z_lock that;
that.show();
这同样适用于z_lock
构造函数中的"布局"变量。
这是一个示例,说明了为什么在高警告级别进行编译并修复警告是一个好主意。编译器可以很容易地注意到并指出未初始化变量的无效使用。
相关文章:
- 如何让C++'tally up'结果并制定计划?
- QGraphicsItems not showing up QGraphicsScene
- OpenGL通常"Up"方向?
- 使用外部依赖项运行 VC++ 单元测试时"Failed to set up execution context"
- 带有"up-"和"center-vec3"参数的glm::rotate()的有效替代方案?
- Cin messing up SetConsoleTitle
- 当您通过Qt小部件打开文件时,是否可以'pop-up'文件?
- OpenCV cv::imshow() GUI not showing
- "Cleaning up"嵌套的 if 语句
- ISO C++禁止在我的代码中使用可变长度数组 'up' [-Wvla]
- Speeding up makefile for SDL2
- setting up sfml
- QTableView does not show up
- CDT 在以下期间发生内部错误: "Setting up indexer"
- Setting up GLEW with QGLWidget
- c++ setting up for sqlite3
- Glib::Regex picking up TextTag-s
- Splitting up classes c++
- Qt 5.4 中的"No debugger set up"
- QMainWindow not showing up