Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2014, 00:13   #101
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Объясните мне для чего нужна функция myDialog()? Точнее, когда она вызывается?

Я вижу, что не надо её вызывать. А вот в чём ошибка не вижу. Дайте ссылку на github или прикрепите архив с проектом. Я у себя запущу

Последний раз редактировалось Stilet; 20.10.2014 в 11:01.
8Observer8 вне форума Ответить с цитированием
Старый 20.10.2014, 19:44   #102
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Вот оный:
Timer
igoreshka3333 вне форума Ответить с цитированием
Старый 20.10.2014, 20:14   #103
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

У меня один из способов поиска и исправления ошибок - это добавлять в комментарии до тех пор пока не заработает. А дальше убирать комментарии по одной строке пока не перестанет работать

Код:
void Dialog::on_pushButton_clicked()
{

//  t--;
//  int ho = t.hour();
//  int mi = t.min();
//  int se = t.sec();
//  ui->lineEdit_7->setText( QString::number( ho ) );
//  ui->lineEdit_8->setText( QString::number( mi ) );
//  ui->lineEdit_9->setText( QString::number( se ) );
}
Убираем комментарий с "t--" и понимаем, что проеблема в этой строке

Смотрим реализацию операторной функции:

Код:
Time& Time::operator-- ()
{
    tick();
    return *this;
}
Смотрим реализацию функции tick():
Код:
void Time::tick()
{
    if (_sec == 0)
    {
        if (_min == 0 && _hour == 0)
        {
            std::cout << std::endl;
            system ("pause");
            exit (1);
        }
        if (_min == 0 && _hour>0)
        {
            _min = 60;
            _hour--;
        }
        _sec = 60;
        _min--;
    }
    _sec--;
}
Можете объяснить почему GUI зависает?
8Observer8 вне форума Ответить с цитированием
Старый 20.10.2014, 21:23   #104
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

std::cout << std::endl;!!!!!
igoreshka3333 вне форума Ответить с цитированием
Старый 20.10.2014, 21:50   #105
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Код:
system ("pause");
Что делает эта команда?

Команда "system("pause")" останавливает выполнение программы. Закомментируйте её и GUI не будет зависать

Последний раз редактировалось Stilet; 31.10.2014 в 07:34.
8Observer8 вне форума Ответить с цитированием
Старый 20.10.2014, 22:15   #106
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Этот фрагмент удалили - буду думать дальше!
Код:
if (_min == 0 && _hour == 0)
        {
            std::cout << std::endl;
            system ("pause");
            exit (1);
        }
Это актуально для моего Билдера, что б имела место задержка экрана!
Код:
system ("pause");
igoreshka3333 вне форума Ответить с цитированием
Старый 20.10.2014, 22:41   #107
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

C GUI не нужна задержка консоли, так как консоль не нужна

Не забывайте, что я жду релиза вашего приложения в виде архива с исполняемым файлом и необходимыми dll

Последний раз редактировалось 8Observer8; 20.10.2014 в 22:43.
8Observer8 вне форума Ответить с цитированием
Старый 20.10.2014, 23:21   #108
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Не! Я сдаюсь - оно не дает ввести значения и сразу выводит таймер
igoreshka3333 вне форума Ответить с цитированием
Старый 20.10.2014, 23:39   #109
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Это потому что у вас в коде таймер соединён с обработчиком кнопки. Каждую секунду таймер вызывает обработчик кнопки:

Код:
void Dialog::on_pushButton_clicked()
{
    t--;
    int ho = t.hour();
    int mi = t.min();
    int se = t.sec();
    ui->lineEdit_7->setText( QString::number( ho ) );
    ui->lineEdit_8->setText( QString::number( mi ) );
    ui->lineEdit_9->setText( QString::number( se ) );
}
В этом обработчике функции setText() выставляют значения в полях ввода и затирают предыдущие, то есть те, которые вы вводите. Не торопитесь, подумайте

Соедините таймер с другим слотом. И там напишите этот код:
Код:
void Dialog::slotUpdate()
{
    t--;
    int ho = t.hour();
    int mi = t.min();
    int se = t.sec();
    ui->lineEdit_7->setText( QString::number( ho ) );
    ui->lineEdit_8->setText( QString::number( mi ) );
    ui->lineEdit_9->setText( QString::number( se ) );
}
Стартуйте таймер по нажатию на кнопку "Start":
Код:
void Dialog::on_pushButton_clicked()
{
    _timer.start( 1000 );
}
Добавьте ещё одну кнопку "Set" при нажатии на которую будет устанавливаться таймер. И добавьте ещё поля ввода для установки таймера

Последний раз редактировалось Stilet; 22.10.2014 в 07:37.
8Observer8 вне форума Ответить с цитированием
Старый 21.10.2014, 00:03   #110
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Сейчас попробую!

Цитата:
Соедините таймер с другим слотом. И там напишите этот код:
Соединил:
Код:
connect( &_timer, SIGNAL( timeout() ),
                 this, SLOT(slotUpdate() ) );
Изменил:
Код:
void Dialog::slotUpdate()
{
    ui->lineEdit_7->setText( QString::number(t.hour()));
    ui->lineEdit_8->setText( QString::number( t.min()));
    ui->lineEdit_9->setText( QString::number( t.sec()));
    t--;
}

void Dialog::myDialog()
{
    int h = ui->lineEdit->text().toInt();
    int m = ui->lineEdit_2->text().toInt();
    int s = ui->lineEdit_3->text().toInt();
    t.set_Time(h, m, s);
}

void Dialog::on_pushButton_clicked()
{
   _timer.start( 1000 );
}
Тот же результат - шурует таймер, не дожидаясь клика!

Последний раз редактировалось Stilet; 22.10.2014 в 07:36.
igoreshka3333 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
описать класс в с# volkodinocka Помощь студентам 0 09.11.2013 22:05
Описать класс С# NeoX_2011 Помощь студентам 1 19.03.2012 00:10
C# исправление ошибки. Описать класс, реализующий шестнадцатеричный счетчик PROkaZZZniK Помощь студентам 7 09.02.2012 16:29
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 14:42
Описать класс. Telec Общие вопросы C/C++ 1 30.04.2010 18:43