Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сигналы
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
dmitryrocks
Здравствуйте. Итак, код:

saveload.h:
#ifndef SAVELOAD_H
#define SAVELOAD_H

#include <QDialog>
class QPushButton;

class SLDialog : public QDialog {
      Q_OBJECT
    public:
      SLDialog(QWidget *parent = 0);

    public slots:
      void Func();

    private:
      QPushButton *leftButton;
      QPushButton *rightButton;
};

#endif

saveload.cpp:
#include <QtGui>
#include "saveload.h"

SLDialog::SLDialog(QWidget *parent) : QDialog(parent)
      {
      QPushButton *leftButton = new QPushButton("left");
      QPushButton *rightButton = new QPushButton("right");

      connect(rightButton, SIGNAL(clicked()), this, SLOT(Func()));
      
      QHBoxLayout *layout = new QHBoxLayout;
      layout->addWidget(leftButton);
      layout->addWidget(rightButton);
      setLayout(layout);
      }

void SLDialog::Func()
{
      leftButton->setEnabled(false);
}

main.cpp (чисто вывод):
#include <QApplication>

#include "saveload.h"

int main(int argc, char *argv[])
{
      QApplication app(argc, argv);
      SLDialog *dialog = new SLDialog;
      dialog->show();
      return(app.exec());
}


Как по сигналу с помощью слотов изменить "включенность" кнопки? Вопрос к saveload.cpp в секции slots, в коде Func() (все ли правильно?). Компилируется, выполняется с Segmentation fault.
lanz
      QPushButton *leftButton = new QPushButton("left");
      QPushButton *rightButton = new QPushButton("right");

Создаете локальную переменную, которой присваиваете адрес вновь созданного объекта.
Локальная переменная с тем же именем что и поле класса, скрывает это поле, поэтому поле остается неинициализированным.
Когда пытаетесь его достать в Func, все падает.
dmitryrocks
      leftButton = new QPushButton("left");
      rightButton = new QPushButton("right");

В таком виде завелось. Благодарю lanz.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.