Название: простая задача Отправлено: qtnewbie от Январь 11, 2017, 17:36 Здравствуйте. Программа простая - кнопка и прогрессбар на форме, при нажатии на кнопку на единицу увеличивается значение, которое отображает прогрессбар. Для этого я создаю собственный слот increase, который увеличивает на единицу переменную count, и подключаю его к сигналу нажатия кнопки. В слоте increase вызываю сигнал set_pos, который связываю с слотом setValue прогрессбара. Все это не работает, не могу понять почему.
win.h Код: #ifndef WIN_H win.cpp Код: #include "win.h" main.cpp Код: #include <QApplication> Название: Re: простая задача Отправлено: Пантер от Январь 11, 2017, 17:47 increase принимает параметр, а у clicked его нет. Убери у слота параметр.
Название: Re: простая задача Отправлено: qtnewbie от Январь 11, 2017, 18:13 increase принимает параметр, а у clicked его нет. Убери у слота параметр. Не помогло. Вопрос остается в силе. Как слот с сигналом соединить в любой книге написано. А что делать если мне самому надо установить значение в прогрессбаре или просто самому передать какое-либо значение в слот? Нигде этого не видел, хотя задача простейшая, у всех должна возникать в самом начале. Название: Re: простая задача Отправлено: Пантер от Январь 11, 2017, 18:29 Реализацию set_pos убери. А еще в дебаге собери и посмотри, какие ошибки тебе в консоль пишутся.
Название: Re: простая задача Отправлено: PimenS от Январь 11, 2017, 18:31 У вас как минимум 3 ошибки:
1. Класс работающий с сигналами должен иметь макрос Q_OBJECT 2. Инициализируйте count. 3. Кто за вас будет очищать память? ЗЫ: как то так Код: class win : public QWidget Цитировать win::win(QString str) : QWidget() { setWindowTitle(str); count = 0; pgb1 = new QProgressBar(this); pgb1->setOrientation(Qt::Vertical); btn_plus = new QPushButton("+", this); lay_main = new QVBoxLayout; lay_main->addWidget(pgb1); lay_main->addWidget(btn_plus); setLayout(lay_main); connect(btn_plus, SIGNAL(clicked()), this, SLOT(increase())); connect(this, SIGNAL(set_pos(int)), pgb1, SLOT(setValue(int))); } void win::increase() { count++; emit set_pos(count); } Название: Re: простая задача Отправлено: qtnewbie от Январь 11, 2017, 18:52 Спасибо, помогло. Про очистку памяти не понял. Когда удаляется экземпляр класса разве не удаляется все его элементы?
Название: Re: простая задача Отправлено: PimenS от Январь 11, 2017, 19:11 Спасибо, помогло. Про очистку памяти не понял. Когда удаляется экземпляр класса разве не удаляется все его элементы? Удаляются. Понятно что в вашем случае, родитель присваивается через QVBoxLayout. Только все-таки лучше родителя указывать явно, например: pgb1 = new QProgressBar(this); Тогда не возникает вопросов, удалится этот объект или нет. Название: Re: простая задача Отправлено: lit-uriy от Январь 12, 2017, 06:12 >вызываю сигнал set_pos
сигналы посылают, а не вызывают. |