Russian Qt Forum

Qt => Вопросы новичков => Тема начата: karpenko1989 от Январь 12, 2012, 08:37



Название: Сигналы и слоты
Отправлено: karpenko1989 от Январь 12, 2012, 08:37
Здравствуйте, имеется код:
Код:
#include <QtGui>

#include "trendtop.h"

TrendTop::TrendTop()
{
//Добавляем верхние кнопки
    QPushButton *pselectParams = new QPushButton(QString::fromLocal8Bit("Выбор параметров"));
    QPushButton *plocalGroup = new QPushButton(QString::fromLocal8Bit("Локальная группа"));
    QPushButton *phalfHour = new QPushButton(QString::fromLocal8Bit("30 минут"));
    QPushButton *ptvelveHour = new QPushButton(QString::fromLocal8Bit("12 часов"));
    QPushButton *poneDay = new QPushButton(QString::fromLocal8Bit("1 сутки"));
    QPushButton *pthreeDay = new QPushButton(QString::fromLocal8Bit("3 суток"));
    QPushButton *potherInterval = new QPushButton(QString::fromLocal8Bit("Другой"));
    QPushButton *psaveIntoFile = new QPushButton(QString::fromLocal8Bit("Сохранить в файл"));
    QLabel *psetInterval = new QLabel(QString::fromLocal8Bit("Установить интервал"));

    connect(pselectParams, SIGNAL(clicked()), SLOT(ButtonClicked()));

//Компонуем верхние кнопки по горизонтали
    QHBoxLayout* btnTopLayout = new QHBoxLayout;
    btnTopLayout->addWidget(pselectParams);
    btnTopLayout->addWidget(plocalGroup);
    btnTopLayout->addSpacing(100);
    btnTopLayout->addWidget(psetInterval);
    btnTopLayout->addWidget(phalfHour);
    btnTopLayout->addWidget(ptvelveHour);
    btnTopLayout->addWidget(poneDay);
    btnTopLayout->addWidget(pthreeDay);
    btnTopLayout->addWidget(potherInterval);
    btnTopLayout->addSpacing(30);
    btnTopLayout->addWidget(psaveIntoFile);

   QWidget* wgtTop = new QWidget;
   wgtTop->setLayout(btnTopLayout);
   wgtTop->show();

}



//Слоты для кнопок

void TrendTop::ButtonClicked()
{
 plocalGroup->setVisible(false);

}

В нем мне необходимо, к примеру, по нажатии на кнопку "Выбор параметров" сделать невидимой кнопку "Локальная группа".
Программа компилируется, но если нажать на кнопку "Выбор параметров" завершается с ошибкой:

*.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства.Передайте Microsoft сведения об ошибке.

Что я делаю не так? Спасибо.


Название: Re: Сигналы и слоты
Отправлено: ddrtn от Январь 12, 2012, 08:47
plocalGroup - локальная переменная в конструкторе.
в ButtibClicked она не видна.
объявите ее членом класса


Название: Re: Сигналы и слоты
Отправлено: karpenko1989 от Январь 12, 2012, 08:59
plocalGroup - локальная переменная в конструкторе.
в ButtibClicked она не видна.
объявите ее членом класса
Не могли бы вы пояснить как это сделать?


Название: Re: Сигналы и слоты
Отправлено: Bepec от Январь 12, 2012, 09:19
Сделайте свои кнопки полями класса.

В *.h файле напишите
Код:
private:
QPushButton * plocalGroup;
(не забудьте об инклудах ^^)

В *.cpp замените
Код:
QPushButton *plocalGroup = new QPushButton(QString::fromLocal8Bit("Локальная группа"));
на
Код:
plocalGroup = new QPushButton(QString::fromLocal8Bit("Локальная группа"));


Название: Re: Сигналы и слоты
Отправлено: karpenko1989 от Январь 12, 2012, 10:08
Огромное спасибо, все заработало


Название: Re: Сигналы и слоты
Отправлено: Bepec от Январь 12, 2012, 10:19
Учтите на будущее.

Поля, описанные в
Код:
private:
доступны из любой функции этого класса.

А поля, описанные в
Код:
public:
доступны отовсюду.