Russian Qt Forum

Qt => Вопросы новичков => Тема начата: QPeter от Февраль 21, 2014, 13:28



Название: Qt Designer. Сигналы и слоты
Отправлено: QPeter от Февраль 21, 2014, 13:28
Совсем недавно начал осваивать Qt и не смотря на наличие книжки Макса Шлее появляются всё новые и новые вопросы, на которых не могу получить ответы.
Вот один из них:
Как видно на картинке https://drive.google.com/file/d/0B_y-nG4qALcOTGJRQ1FkRnJqb1E/edit?usp=sharing в приложение есть несколько вкладок. На первой открытой вкладке есть кнопка "Начать испытание", она по умолчанию не активна(снял галочку с параметра enable, мало ли это важно), и как сделать так что бы она становилась активной только при вводе всех значений в текстовые поля+ измерение в спин-боксе. Пытался соединять textChanged и animateClick- не работает(( Помогите пожалуйста.


Название: Re: Qt Designer. Сигналы и слоты
Отправлено: Swa от Февраль 21, 2014, 13:57
Для всех контролов создаете слоты (например, для QLineEdit - textChanged() и т.д., для каждого контрола - свой слот), соединяете сигналы об изменении данных в контроле с его слотом. Каждый слот вызывает один метод, например
Код:
void CheckInput()
, в котором проверяется, введены ли все данные. Если введены, то делаем кнопку активной, в противном случае - неактивной.


Название: Re: Qt Designer. Сигналы и слоты
Отправлено: QPeter от Февраль 21, 2014, 14:42
Суть идеи вроде понял, но как реализовать все равно пока не знаю. (

Если я правильно себе всё представляю, то это должно выглядеть следующим образом:
Код:
void CheckInput(){
if (пришел сигнал от первого элемента)
 {
   сделать кнопку активной;
 }

else if (пришел сигнал от второго элемента)
 {
   сделать кнопку активной;
 }
...
else {кнопка не активна}

};


Название: Re: Qt Designer. Сигналы и слоты
Отправлено: kambala от Февраль 21, 2014, 15:45
соедини все сигналы с одним слотом и в этом слоте проверяй что введено во все требуемые элементы, как-то так:
Код
C++ (Qt)
ui->startExperimentButton->setEnabled(!ui->textedit1->text().isEmpty() && !ui->textedit2->text().isEmpty() && ... && ui->spinbox1->value() > 0 && ui->spinbox2->value() > 0 ...);


Название: Re: Qt Designer. Сигналы и слоты
Отправлено: QPeter от Февраль 21, 2014, 17:14
А в объекте сигнала что писать?? Подправьте код пожалуйста.
Код:
QObject::connect(/*???*/, SIGNAL(Activate()), pbStart, SLOT(animateClick()));

Код:
void Widget::Activate()
{
    ui->pbStart->setEnabled(!ui->leManuf->text().isEmpty() && !ui->leSerNum->text().isEmpty());
}


Название: Re: Qt Designer. Сигналы и слоты
Отправлено: Alex Custov от Февраль 21, 2014, 17:33
перестань насиловать форум стандартными вопросами http://qt-project.org/doc/qt-4.8/signalsandslots.html


Название: Re: Qt Designer. Сигналы и слоты
Отправлено: QPeter от Февраль 21, 2014, 19:22
Окей, постараюсь. ::)
Как раз хотел отписаться, что уже разобрался со всем.)


Название: Re: Qt Designer. Сигналы и слоты
Отправлено: QPeter от Февраль 21, 2014, 19:44
Единственное что не могли бы еще подсказать, какая команда проверяет на пустоту text Browser? )


Название: Re: Qt Designer. Сигналы и слоты
Отправлено: kambala от Февраль 21, 2014, 22:13
открой документацию и найди как получить из него текст (QString), а как проверить пустая ли строка уже написано выше