crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Сигналы
dmitryrocks
  опции профиля:
сообщение 11.3.2015, 11:07
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 11.3.2015
Пользователь №: 4353

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте. Итак, код:

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
  опции профиля:
сообщение 12.3.2015, 1:48
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


      QPushButton *leftButton = new QPushButton("left");
      QPushButton *rightButton = new QPushButton("right");

Создаете локальную переменную, которой присваиваете адрес вновь созданного объекта.
Локальная переменная с тем же именем что и поле класса, скрывает это поле, поэтому поле остается неинициализированным.
Когда пытаетесь его достать в Func, все падает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dmitryrocks
  опции профиля:
сообщение 24.3.2015, 22:41
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 11.3.2015
Пользователь №: 4353

Спасибо сказали: 0 раз(а)




Репутация:   0  


      leftButton = new QPushButton("left");
      rightButton = new QPushButton("right");

В таком виде завелось. Благодарю lanz.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 5:46