Qt Segfault - Ошибка некодирования - PullRequest
0 голосов
/ 11 января 2012

Я создавал очень простой класс как часть гораздо более крупного проекта.Класс был таким простым:

class Login : public QDialog
{
    Q_OBJECT
    private:
        QLineEdit* txtUser;
        QLineEdit* txtPass;
        void setupUI();
    public:
        Login(QWidget* parent = 0);
};

При попытке создать функцию setupUI() строка txtUser = new QLineEdit; потерпит крах.Я пытался изменить многое, и ничего не помогло.Я взял проект, скопировал его и удалил все, кроме этого класса и main.cpp, и ошибки не было.Я вернулся к своему первоначальному проекту (перезагрузка Qt Creator), и он продолжал терпеть неудачу.Я начал комментировать случайные самописные заголовочные файлы из основного в случае какого-либо конфликта.После комментирования каждого я перекомпилирую и запускаю.Каждый раз это продолжит терпеть неудачу.После последнего все заработало.Затем я снова включил все, и он снова заработал.

Итак, мой вопрос: что могло вызвать ошибку такого типа с таким простым кодом?Кроме того, что могли бы сделать мои изменения, чтобы исправить это, если код не был изменен?В принципе, если я получаю эту проблему когда-либо снова, и я уверен, что ошибок нет, какие шаги я должен предпринять?

Пожалуйста, помните, что я использую Qt и Qt Creator в Windows.

Наконец, ради завершения, вот код в setupUI():

void Login::setupUI()
{
    QVBoxLayout* main = new QVBoxLayout;
    QHBoxLayout* userBox = new QHBoxLayout;
    QHBoxLayout* passBox = new QHBoxLayout;
    txtUser = new QLineEdit;
    txtPass = new QLineEdit;
    userBox->addWidget(new QLabel("User Name:"));
    userBox->addWidget(txtUser);
    passBox->addWidget(new QLabel("Password:"));
    txtPass->setEchoMode(QLineEdit::Password);
    passBox->addWidget(txtPass);
    main->addLayout(userBox);
    main->addLayout(passBox);
    setLayout(main);
}

1 Ответ

2 голосов
/ 11 января 2012

Иногда вам нужно запустить qmake, чтобы он заработал. Вы можете сделать это прямо из QtCreator.

...