c++ - QMainWindow 没有显示

标签 c++ qt qmainwindow

我制作了一个快速测试程序,执行时似乎没有显示任何内容。这是我的代码:

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 中的对象分配到堆上,这本身就是一个问题,但即使您这样做了,您也应该使用 new 关键字在 C++ 中。

  • 话虽这么说,你真的不应该在堆上分配它:部分原因是它会泄漏内存,但更重要的是没有必要这样做。

因此,替换这些行:

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.");

关于c++ - QMainWindow 没有显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24019969/

相关文章:

c++ - 在成员初始化列表中填充 std::array

c++ - 如何在不关闭套接字的情况下取消异步读/写?

c# - 在 C++ 中使用 C# dll 时出现 C2380 错误

c++ - C++ 中的固体噪声生成

c++ - qt改变QLineEdit形状

python - 在 QMainWindows 中央小部件中的小部件之间切换

c++ - 从 Qt 中的对话框中获取数据并在 Ui 中使用它

c++ - 在 Qt 中如何在用户主目录中打开 QFileDialog::getOpenFileNames

c++ - QML 中的进度条实现以显示 C++ 中循环的进度

qt - 小部件未在基本 Qt 应用程序(QMainWindow)中显示