Название: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: Gate007 от Февраль 15, 2012, 14:42 Задача: сделать так, чтобы в компоненте timeedit отображалось текущее время.
Как я себе это представляю: Имеется компонент типа Qtimeedit, у него есть функция setTime. Для получения текущего времени необходимо использовать объект типа QTime, у которого есть функция currentTime и сигнал timeout. Соответственно нужен слот, который будет соединен с сигналом timeout, а у него в обработчике будет установка текущего времени для объекта timeedit. Если неправ-подскажите где, если прав-смотрим дальше. Пытаюсь реализовать. Для этого в заголовочном файле Код
Далее в cpp: Код
Ошибка 'Ui::MainWindow* MainWindow::ui' is private А как тогда мне обратиться к визуальному элементу не из класса mainwindow? Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: andrew.k от Февраль 15, 2012, 14:53 1. Сделать у класса MyClass публичный метод setTime(const QTime &time), который будет задавать время как надо (лучше)
2. Сделать ui публичным в MyClass (хуже) Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: sudo от Февраль 15, 2012, 14:55 Увидел. Либо сделать сеттер для времени, либо перенести ui в protected Создавать объект QTime не нужно, его метод статический Сигнал timeout() есть у QTimer, у QTime его нет QTime, QDate и QDateTime вообще не имеют ни слотов, ни сигналов, они не являются QObject'ами Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: andrew.k от Февраль 15, 2012, 15:09 Увидел. Либо сделать сеттер для времени, либо перенести ui в protected в publicНазвание: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: sudo от Февраль 15, 2012, 15:12 Где? MyClass отнаследован от MainWindow. Судя по ошибке компилятора ui именно там в public У нас же публичное наследование, protected будет достаточно для доступа Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: andrew.k от Февраль 15, 2012, 15:28 Где? MyClass отнаследован от MainWindow. Судя по ошибке компилятора ui именно там в public У нас же публичное наследование, protected будет достаточно для доступа 2. Судя по ошибке компилятора используется агрегация через указатель. 3. Видимо ТС копировать не умеет (хороший программист будет), поэтому переписывал код по памяти и не весь переписал. 4. Какая связь между уровнем доступа и типом наследования? Ее нет. 5. protected будет недостаточно. Афигеть можно. Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: sudo от Февраль 15, 2012, 15:38 1.
class MyClass : public MainWindow - это не наследование? 2. Именно судя по ошибке компилятора ui находится в MainWindow 3. Да, одного класса не хватает 4-5. Прочитай хотя бы у Алёны С++ (если не знаешь, кто это, то это печально ;) ) про права доступа при наследовании http://alenacpp.blogspot.com/2006/03/blog-post_11.html Андрей, ну я тебя прошу, если мне не веришь, напиши сэмпл ;) Хотя про тип наследования я сказанул не подумав, освежил в памяти этот вид сексуальных извращений Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: Пантер от Февраль 15, 2012, 16:00 Gate007, покажи полностью содержимое cpp/h.
Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: Gate007 от Февраль 15, 2012, 16:13 Код
Код
Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: Пантер от Февраль 15, 2012, 16:31 Зачем тебе Myclass? Определяй слот в MainWindow.
Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: andrew.k от Февраль 15, 2012, 16:32 1. Не заметил, что буквы Q нет.class MyClass : public MainWindow - это не наследование? Неужели, кто-то пользуется этим методом встраивания UI? Тогда все равно странно. Класс сформированый после uic находится в неймспейсе Ui. А тут какой-то неведомый класс MainWindow. Какие тут можно сделать выводы? Никаких. Цитировать Прочитай хотя бы у Алёны С++ (если не знаешь, кто это, то это печально ) про права доступа при наследовании http://alenacpp.blogspot.com/2006/03/blog-post_11.html Рассмешил.Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: andrew.k от Февраль 15, 2012, 16:34 4-5. Вот специально для тебя, sudo, открыл ссылку и нашел строку.Прочитай хотя бы у Алёны С++ (если не знаешь, кто это, то это печально ;) ) про права доступа при наследовании http://alenacpp.blogspot.com/2006/03/blog-post_11.html Андрей, ну я тебя прошу, если мне не веришь, напиши сэмпл ;) Хотя про тип наследования я сказанул не подумав, освежил в памяти этот вид сексуальных извращений Цитировать public наследование protected и public данные из CBase остаются, соответственно protected и public. PS прямо горячая тема получилась))) Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: sudo от Февраль 15, 2012, 16:37 Так тогда чем protected не нравится?
И я ж говорю, про тип наследования сказанул не подумав, за несколько лет абсолютнейшего неиспользования чего либо кроме public остальное затёрлось нафиг, поэтому могу даже спасибо сказать ) Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: andrew.k от Февраль 15, 2012, 16:45 Так тогда чем protected не нравится? Достаточно запомнить, что уровень доступа нельзя повысить, лишь понизить.И я ж говорю, про тип наследования сказанул не подумав, за несколько лет абсолютнейшего неиспользования чего либо кроме public остальное затёрлось нафиг, поэтому могу даже спасибо сказать ) Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: sudo от Февраль 15, 2012, 17:00 Ладно, ты мне ответь, вот есть наш случай:
Код: class Foo Скажи, из Boo мы можем обратиться напрямую к m_member? Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: andrew.k от Февраль 15, 2012, 17:02 Ладно, ты мне ответь, вот есть наш случай: Прочитай пару раз свою Алену, узнаешь.Код: class Foo Скажи, из Boo мы можем обратиться напрямую к m_member? Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: sudo от Февраль 15, 2012, 17:02 Ты мне не как Одессит, а нормально ответь
Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: kambala от Февраль 15, 2012, 17:04 естественно можем
Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: andrew.k от Февраль 15, 2012, 17:04 Ты мне не как Одессит, а нормально ответь Это основы с++, если ты этого не знаешь, это печально.Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: andrew.k от Февраль 15, 2012, 17:08 естественно можем антисемит!Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: sudo от Февраль 15, 2012, 17:12 естественно можем Да понятно, что можем, но меня Андрей старательно убеждал, что protected не будет достаточно для ТС. Ну и уровень доступа тоже можно поменять ;) Только если приходится это делать, значит что-то написано не так... Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: kambala от Февраль 15, 2012, 17:22 ТС вообще какими-то извращениями занимается, о чём ему уже сказали. разве что конечно у него или приложение имеет 2 главных окна (так разве делают?) или MainWindow - это какой-то лично свой базовый класс всех главных окон при разработке приложений.
Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: sudo от Февраль 15, 2012, 17:25 Извращение у него только в использовании отнаследованного от MainWindow MyClassa, он нафиг не нужен - это точно. А так, MainWindow - главное окно, всё нормально :)
Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: Gate007 от Февраль 17, 2012, 11:11 Я премного счастлив что тема вызвала столь бурную дискуссию и заставила кого-то размышлять о смысле программирования/жизни.
Все что я понял из вашей дискуссии-что мне не нужен класс myclass. Хорошо, пусть без него. Тогда выходит: Код Здесь все понятно, вопросов нет. cpp: Код Но слот mySlot не вызывается. Что не так? Насколько я понял, mytimer, SIGNAL( timeout() ) вырабатывается каждую секунду. Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: sudo от Февраль 17, 2012, 11:15 Таймер запусти ;) Метод start
Только полем класса сделай, а то помрёт при завершении работы конструктора Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: Gate007 от Февраль 17, 2012, 13:37 Таймер запусти ;) Метод start Спасибо, что то я про старт и забыл :)Только полем класса сделай, а то помрёт при завершении работы конструктора А можно подробнее почему он должен помирать? Точнее не должен, а правда помирает :) Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: mutineer от Февраль 17, 2012, 13:44 Потому что создан на стеке в методе - то есть это локальная переменная метода. Дальше - в справке по плюсам
Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: Gate007 от Март 12, 2012, 13:46 Код особо не изменился, много думал, поправил.
Следующая проблема-после старта таймера загрузка цп 100%. Не понимаю причины, единственное что приходит в голову-возможно проблема в работе на виртуалке, на которой стоит Qt creator? Код
Код
Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: mutineer от Март 12, 2012, 13:49 Проблема в том, что ты таймеру не выставил интервал и он фигачит timeout() в каждый проход EventLoop, то бишь практически каждую свободную милисекунду
Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: Gate007 от Март 12, 2012, 14:11 Спасибо! Все получилось :)
P.S: для "самых маленьких": таймаут выставляется в методе Start. Название: Re: Сигналы и слоты, текущее время в компоненте типа Qtimeedit. Отправлено: mutineer от Март 12, 2012, 14:14 Спасибо! Все получилось :) P.S: для "самых маленьких": таймаут выставляется в методе Start. Для совсем маленьких - в доках по таймеру описано как выставляется таймаут и как работает таймер |