Russian Qt Forum
Октябрь 01, 2024, 14:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt Designer. Сигналы и слоты  (Прочитано 5535 раз)
QPeter
Гость
« : Февраль 21, 2014, 13:28 »

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

Сообщений: 170


Просмотр профиля
« Ответ #1 : Февраль 21, 2014, 13:57 »

Для всех контролов создаете слоты (например, для QLineEdit - textChanged() и т.д., для каждого контрола - свой слот), соединяете сигналы об изменении данных в контроле с его слотом. Каждый слот вызывает один метод, например
Код:
void CheckInput()
, в котором проверяется, введены ли все данные. Если введены, то делаем кнопку активной, в противном случае - неактивной.
Записан
QPeter
Гость
« Ответ #2 : Февраль 21, 2014, 14:42 »

Суть идеи вроде понял, но как реализовать все равно пока не знаю. (

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

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

};
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #3 : Февраль 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 ...);
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
QPeter
Гость
« Ответ #4 : Февраль 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());
}
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Февраль 21, 2014, 17:33 »

перестань насиловать форум стандартными вопросами http://qt-project.org/doc/qt-4.8/signalsandslots.html
Записан
QPeter
Гость
« Ответ #6 : Февраль 21, 2014, 19:22 »

Окей, постараюсь. Строит глазки
Как раз хотел отписаться, что уже разобрался со всем.)
Записан
QPeter
Гость
« Ответ #7 : Февраль 21, 2014, 19:44 »

Единственное что не могли бы еще подсказать, какая команда проверяет на пустоту text Browser? )
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #8 : Февраль 21, 2014, 22:13 »

открой документацию и найди как получить из него текст (QString), а как проверить пустая ли строка уже написано выше
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.153 секунд. Запросов: 23.