سؤال

لقد جعلت برنامج اختبار سريع الذي لا يبدو لإحضار أي شيء عند تنفيذها.هنا هو رمز بلدي:

(زد لوك).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

(زد لوك).حزب الشعب الكمبودي

#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);
    }
}

الرئيسية.حزب الشعب الكمبودي

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

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

    return app.exec();
}

من فضلك ، أي مساعدة ستفعل.لقد أجريت البحوث حول كل شيء للقيام مع كمينويندو ولا يزال لا شيء.من المحتمل أن يكون من السهل حل هذا بغباء وأنا آسف لمثل هذا السؤال الأساسي.

هل كانت مفيدة؟

المحلول

لديك العديد من المشكلات في التعليمات البرمجية الخاصة بك...دعونا نبدأ مع أهم:

  • كنت تخصيص الكائن في الرئيسي الخاص بك.حزب الشعب الكمبودي على كومة وهو نوع من القضية في حد ذاته ، ولكن حتى لو كنت تفعل ذلك ، يجب عليك استخدام new الكلمة الرئيسية لذلك في ج++.

  • ومع ذلك ، يجب عليك حقا عدم تخصيصه هنا على الكومة:جزئيا لأنه سوف تسرب الذاكرة ، ولكن الأهم من ذلك ليست هناك حاجة لذلك.

لذلك ، استبدل هذه الخطوط:

z_lock *that;
that -> show();

مع هذا ببساطة:

 z_lock that;
 that.show();

هذه هي نفس المشكلة إلى حد كبير بالنسبة للتخطيطات الخاصة بك هنا أيضا:

QHBoxLayout *layout1;
QVBoxLayout *layout2;

يرجى تغييرها إلى:

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

وعلاوة على ذلك ، يجب أن لا تشمل وحدة كتغي كلها مثل هذا:

#include <QtGui>

فقط قم بتضمين الفصول التي تحتاجها في النهاية.على الرغم من أن هذا هو في بعض كيو تي 4 كتاب, هذا هو ممارسة سيئة.

هذه الطريقة غير مجدية أيضا في التعليمات البرمجية الخاصة بك لأنها لا تفعل شيئا سوى التفاف الفتحة الموجودة:

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

أيضا ، قد ترغب في استخدام tr() طريقة لأشياء مثل هذه للحصول على ترجمة للغات أخرى:

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

نصائح أخرى

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 منشئ.

هذا مثال على سبب فكرة جيدة التجميع على مستوى تحذير عال وإصلاح التحذيرات.يمكن للمترجم أن يلاحظ بسهولة ويشير إلى الاستخدام غير الصالح للمتغيرات غير المهيأة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top