Точное время 0100 часов 010111 минут

    KT102B1_012.png - image uploaded to PicamaticДолго выбирал блог между «Я безумный», «Странные вещи» и «Я пиарюсь»...



    Началось всё с того, что мне подарили двоичные часы. Оказалось, что двоичная система не такая уж неудобная.



    Под катом вы узнаете, что случилось с моим мозгом («Я безумный»), что я сделал («Странные вещи»), и как такое же заполучить себе («Я пиарюсь»).



    Начнём с того, что я сделал двоичные часы на рабочий стол


    Сперва это было сделано на Python/Tkinter, но потом, я переписал их Qt. Без наворотов. Должно собираться везде, я тестировал под UNIX и под Windows (MinGW) — собирается. Выглядит так (цвета можно настроить любые):



    zoc.png - upload images with Picamatic


    Есть меню с настройками немногочисленных аспектов внешнего вида:



    zoc-menu.png - image uploaded to Picamatic


    Эти настройки можно сохранить.



    Если хотите поменять размеры, то можно подредактировать файл zoclock.h. Если что-то не понравится — буду рад комментариям.



    Сайт проекта zoclock.googlecode.com
    Прямая ссылка на исходники zoclock-1.0.0.tar.gz.
    upd: Новая версия — теперь с «always on top»! :-) Прямая ссылка на исходники zoclock-1.0.1.tar.gz (планирую ближайшее время учесть и другие пожелания).



    Собирается всё двумя командами:



    qmake
    make

    Команды могут зависеть от вашей системы. На пример, если у вас Windows/MinGW, то вместо make надо использовать mingw32-make; если у вас FreeBSD, то вместо qmake пишем qmake-qt4 и так далее. Суть от этого не меняется.



    А с мозгом моим случилось то, что я освоил быстрое понимание двоичной системы


    Это оказалось совсем не сложно, достаточно запомнить...



    Основное


    Восемь маленьких чисел запомнить легко


    000 - 0
    001 - 1
    010 - 2
    011 - 3
    100 - 4
    101 - 5 (очень важное число)
    110 - 6 (уже можно не запоминать, см. далее)
    111 - 7 (есть несколько причин его запомнить)

    Числа, которые бросаются в глаза


    Это числа, состоящие из одних единиц



    111 - 7
    1111 - 15 (четверть часа)
    11111 - 31

    Веса разрядов


    32 16  8  4  2  1

    (Эти числа перекликаются с предыдущими, что облегчает запоминание :-))



    Большую часть этой информации вы, наверняка, и так знали...



    Устный счёт


    … тогда вы можете моментально воспринять не слишком большие двоичные числа. Достаточно воспользоваться двумя правилами



    Умножение на 2 равносильно сдвигу влево


    и



    Разбирать число лучше слева направо


    Потому, что проще прибавлять к растущему числу меньшие слагаемые, чем наоборот.



    Воспользуемся нашими знаниями


    1010 — очевидно, что это 101 сдвинутое на один разряд 5*2, т.е. 10.



    Чуть сложнее, что такое 10111? Можно было бы представить как 16+7 но это очень сложно складывать в уме. На много проще угадать тут последовательность 101 и заметить, что 10111=10100+11. А это уже 5*4+3 т.е. 23.



    Ещё пример 11101. Это, очевидно 7*4+1 — 29.



    11110 — 15*2 = 30.



    101011 — 5*8+3 = 43.



    И ещё — 111000. Это не 8+16+32 (сколько вам надо времени, чтобы вычислить это в уме?) а это 7*8 = 56!



    Всё остальное — в том же духе :-)



    Справедливости ради следует сказать, что


    Я не первый, кто придумал писать такие часы. Их есть много (даже на googlecode полно), но я не смог найти такие, которые удовлетворяли бы меня. Во многих случаях эти программы просто не дописаны. Я же сделал так, чтобы самому нравилось...



    Наиболее выдающимся наверно можно назвать вот этот проект. Мне он не подошёл потому, что он (1) не двоичный, а двоично-десятичный; (2) очень большое окно; (3) не работает один пункт меню (не доделан, по признанию автора) и… я не решился заюзать его исходный код потому, что он противоречит моим религиозным взглядам, и, как мне кажется, попирает лучшие идеи, заложенные в Qt. Как вы понимаете, все эти пункты являются чисто субъективными. Плюсы же, могут перевесить все недостатки. Это (1) проверенность временем, (2) софт, как я понимаю собирается и с Qt3 и Qt4, и есть реализация на Java. Возможно, вам этот проект понравится больше моего.



    Но к чему это я?...



    А! Да! Если кто-то возьмёт на себя труд посмотреть код, обнаружит какие-то его аспекты непотребными и не поленится высказать это мне в открытом споре или в привате — я буду бесконечно признателен!



    Если кто-то будет использовать мой код, как пример использования Qt (а мне кажется, что это не плохой маленький примерчик), то я буду считать, что потратил на это дело полдня не зря!



    Если у кого-то будут пожелания (будильник?) — принимаются!



    Enjoy! :-)

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 147

      +11
      Кстати в КДЕ4 есть бинарные часы в стандартной поставке, я ими тоже почему то пользуюсь:
        +2
        во! они, как и все, — двоично-десятичные, а мне хотелось полностью двоичные :-)
          0
          согласен, но они объективно удобнее.
          Мне больше такой вариант нравится, тут эстетичность, не так сильно усложняет восприятие. Твой вариант так, для побаловаться. А для повседневного лично мне такой больше нравится.
            0
            А они точно двоично-десятичные? Просто я сталкивался с конструкциями, когдя 2/3 старших разряда смещены в правый столбец для удобства чтения. (увы, сам проверить никак не могу)
              +19
              Полностью двоичные должны показывать unix time!
                0
                предлагаю написать для QNix в 16-й системе :)
                  0
                  предлагаю написать для QNix в 16-й системе :)
                  +2
                  Мне их так не хватает в винде :(
                    +1
                    под винду есть прожка, называется кажется FineClock, там множество всяких некрасивых и совсем некрасивых скинов с обычными цифрами, но один из них как раз показывает время в двоично-десятичном варианте=)
                    0
                    я уже пару месяцев только такими часами пользуюсь на своей рабочей тачке)
                    +12
                    Фигею молча…
                      +19
                      Ну если даже Xaker-ы фигеют… :)))
                        +9
                        даже симпсоны…
                          0
                          А я не настоящий Симпсон :)
                            +2
                            Который интегралы считал?
                            +2
                            Я не настоящий хакер…
                              0
                              Вы наверное агент ФБР
                                0
                                Точно, такие часы только агентам ФБР, да разведчикам. Что бы если поймают не просекли с какой планеты и с какого часового пояса ваще экспонат )))
                          0
                          ну блин нет слов просто!!!
                          часики наручне где купить то можно??
                          Очень вдруг захотелось приобрести
                            0
                            Смотрите сайт, я кроме ниго ничего не знаю. Мне подарили :-)
                            • UFO just landed and posted this here
                            • UFO just landed and posted this here
                                0
                                вот несколько интересных вариантов нашел для себя, может и тебе понравятся:
                                www.stormwatches.com/watches/mens/mk-2-circuit--11084
                                www.stormwatches.com/watches/mens/vibe-11025

                                правда они показывают время не в двоичной системе, но смотрятся шикарно!
                                  0
                                  блин спасибо ребят!!!
                                  Вообще суппер.
                                  0
                                  я купил неделю занад именно эти часы как у автора на картинке. суппер :)
                                    0
                                    я купил неделю занад именно эти часы как у автора на картинке. суппер :)
                                    покупал их в Штуттгарте, Германия за 149 евро (2 года гарантии). Место продажи нашел на сайте The One — www.01theone.com/

                                    Автору пасибо за статью, для меня актуально :)
                                    0
                                    Он по лкм должен закрыватся?
                                      0
                                      не должен, меню должно быть, а меню Quit внизу
                                      0
                                      101011 — 5*8+3 = 43.
                                        0
                                        решение не правильное — ответ правильный :-)))
                                        спасибо — пофиксил :-)
                                          0
                                          ну почему не правильное? :) Возможно он считал как 101 сдвинутое на 3 разряда + 2
                                          Хотя конечно это менее удобно, нежели 1010 сдвинутое на 2 + 2
                                            0
                                            + 3, пардон :-)
                                        +12
                                        я к стрелкам Seiko после дигитов Casio привыкал очень долго, а тут такая мясорубка. Представьте, а если за рулем время смотреть по таким? Да и пешком в открытый люк можно сигануть пока считаешь.
                                          0
                                          Это, ИМХО, дело привычки. За пару недель будете с первого взгяда как по стрелкам ориентироваться.
                                            0
                                            Опасные улицы Гетто.
                                              0
                                              Все гораздо ближе! :(
                                            +7
                                            Было бы забавно если б они еще показывали не обычное время а unix-time. Вот это настоящий хардкор)
                                              0
                                              Это идея! Можно внизу пустить строку маленких LEDов c юникстаймом!
                                              Пожелание записано! (и мне оно нравится :-))
                                                0
                                                кстати, задумался что довольно часто лезу в консоль посмотреть unix-time при администрировании, ковырянии в БД и скриптах. думаю даже была бы польза от такого хардкора

                                                подумал, и повесил на хоткей
                                                date +%s | xclip -sel clipboard
                                                +1
                                                Идешь по улице, прохожий попросить сказать, сколько сейчас времени… А вы стоите и думаете, блин, сколько же…: )
                                                  +6
                                                  А если вместо ответа — просто показать часы, то ненулевой шанс схлопотать :)
                                                  +1
                                                  — Который час?
                                                  — Вот, смотрите!
                                                    +2
                                                    — Который час?
                                                    — 0100010111
                                                    +2
                                                    Да, как в анекдоте — некогда мне 11 на 15 делить, сам дели :)
                                                      +5
                                                      у меня точно такие же часы и однажды был случай когда я шел по городу, как говорят «весь в себе» и очень неожиданно у меня как раз спросили время, я жутко растеряно повтыкал в свои часы (спросивший кстати тоже) и ответил с очень глупой улыбкой, что не имею ни малейшего понятия о том, который же сейчас час :)))
                                                      0
                                                      Черт, хочу!
                                                        0
                                                        может вы сделаете always on top и скомпилите в exe? поставил бы на десктоп. Был бы рад.
                                                          0
                                                          Сделаю на неделе или на выходных
                                                            0
                                                            оу! круто! спасибо.
                                                              0
                                                              кстати клёвые часики. забыл сказать. =)
                                                            0
                                                            очепяточка небольшая (я думаю):
                                                            "...16+7 но это очень ложно складывать..."
                                                            0
                                                            Как-то автор довольно сложно понимает перевод из двоичной системы в десятичную…
                                                            Вот как это понимаю я:

                                                            1001 → 8+1 = 9
                                                            10101 → 1+4+16 = 21
                                                            именно для упрощения восприятия на часиках и написаны веса разрядов.

                                                            ЗЫ: не спорю — кому-то может быть и проще запоминать конкретные значения, кому-то проще понимать, что 1010 — это сдвинутое 101, которое = 5, а значит 1010 — это 10. Но мне проще (если ещё не отложилось в моск) складывать.
                                                            ЗЫЫ: Надеюсь мой подход для кого-то окажется полезным =)
                                                              –1
                                                              Слишком уже ваш подход неординарен. Вы это правда сами придумали?
                                                                +3
                                                                Это весьма распространенный подход, годится для перевода из любой системы счисления. По-моему более понятным процесс перевода делает вот такая запись:
                                                                1001 → 1*2^3 + 0*2^2 + 0*2^1 + 1*2^0 = 8 + 0 + 0 + 1 = 9

                                                                  +2
                                                                  Т.е. если я пишу что-то с сарказмом, это надо обязательно подписывать. А так я немного знаю математику, спасибо :)
                                                                    +1
                                                                    Сарказм я ваш не разглядел. Надеюсь, мой комментарий хоть кому-нибудь здесь пригодится.
                                                              –1
                                                              Хм! Поместил в Избранное
                                                                0
                                                                А я наверно очень глуп… :( Скачал часы от сюда www.rexi.org/software/binclock/ и никак не пойму как на них считать…
                                                                  +1
                                                                  Там десятичные циры записываются двоично.
                                                                  Пример логики: 25 это две цифры 2 и 5, это 10 и 101, это 010 0101 на часах.
                                                                  Мне такая логика меньше нравится, я стронник чистой двоичной системы :-)
                                                                    0
                                                                    это я понял, но как прочитать например вот это?

                                                                      +3
                                                                      18:39:32?
                                                                  0
                                                                  Вы безумный! :)
                                                                  И молодец.
                                                                    +3
                                                                    16+7 сложнее чем 5*4 + 3?.. Вы угадали с рубрикой :)
                                                                      0
                                                                      Но ведь 5*4 это очень просто?! А 20+3 это вообще жуть как просто! :-)
                                                                        0
                                                                        просто*просто=мегапросто :)
                                                                          +1
                                                                          несогласен
                                                                          просто*просто = квадрапросто
                                                                      0
                                                                      ну и ну ;)
                                                                        0
                                                                        теперь очередь за тем, кто сделает это в другой системе счисления. В 16-ричной, например
                                                                          0
                                                                          В 16-ричной еще проще, меньше операций сложения для перевода в десятичную, но это не тру :)
                                                                            +2
                                                                            Идея для дизайнерских часов: показывать время цветом в RGB. К примеру, 16:30:47 == #101E2f. И он будет пла-а-а-авно меняться с каждой секундой %)
                                                                            Хотя очень темно получится… Максимально светлый цвет будет за секунду до полуночи: 23:59:59 == #173B3B.
                                                                            С другой стороны, можно умножить на коэффициент. К примеру, на 4 — тогда будет охвачен почти весь RGB.
                                                                          +2
                                                                          Прикольно.
                                                                          Есть небольшие стилистические замечания.

                                                                          * имена хидеров не совпадают с именами классов
                                                                          * переменные цикла лучше объявлять внутри цикла
                                                                          например:
                                                                          for (int i = 0; i < 10; ++i)…

                                                                          * зачем писать this->…?

                                                                          * смешивание стилей именования переменных click_pos, displayDots

                                                                          * в C++ есть более элегантные способы объявления констат, чем через #define

                                                                          мне больше всего нравиться вот такой способ
                                                                          enum { ZOC_WINDOW_EIDTH = 54 };
                                                                            0
                                                                            Огромное спасибо!
                                                                            Я ещё заметил, что #include не убрал :-)
                                                                            Всё будет подчищенно в следующей версии :-)
                                                                            0
                                                                            Забавная шутка, только используя ее сейчас и не смотря в окно не известно сколько сейчас часов 3 часа дня или 3 часа ночи. Можно сделать один из неиспользуемых разрядов в часах для обозначение p.m., a.m. или выводить часы от 000000 (0) до 010111 (23).
                                                                            Я немного дописал код, что бы можно было выводить часы и в 12 и в 24 системах.
                                                                            В файле zoclock.h добавил константу:
                                                                            ZOC_CLOCK_TYPE_24 0
                                                                            ZOC_CLOCK_TYPE_24 1
                                                                            А вот архивчик с дописанным кодом.
                                                                              0
                                                                              Я сделал полностью как наручные часы. Часы от 1 до 12. Мне кажется 6 на много проще воспринимается, чем 18… Но можно заимплементить два режима. Нужно это? (это вопрос :-))
                                                                                0
                                                                                Думаю, можно добавить галочку 12 || 24.
                                                                                Мне удобнее 24 вариант. (:
                                                                              0
                                                                              а часы то где такие заказать? :)
                                                                                0
                                                                                можно сделать, чтоб эти часики ещё в тетрис трансформировались. Так поиграл — «о! время-то изменилось! пора домой!»
                                                                                  0
                                                                                  Буду благодарен если кто-нибудь выложит бинарник этих часов под win32
                                                                                    0
                                                                                    Я максимум на выходных выложу. Вот внесу предолжения и будет 1.1 уж с бинарником.
                                                                                    –1
                                                                                    Я подобное когда-то на JS реализовал:
                                                                                    v-isa.narod.ru/soft/p020.html
                                                                                    Может кому пригодится :)
                                                                                      0
                                                                                      А зачем оно вообще надо?
                                                                                      Начнем с того, чем вас не устаивают часи в десятичной системе?
                                                                                      • UFO just landed and posted this here
                                                                                          +1
                                                                                          Чтобы мозг не атрофировался. =)
                                                                                          p.s. у меня тоже такие часы есть
                                                                                            0
                                                                                            мозг можно разминать более полезным трудом
                                                                                              +1
                                                                                              Одно другому не мешает.
                                                                                            0
                                                                                            А чем вас не устраивает способ вообще обходится без часов тогда уж, ведь есть небо над головой — никто не отменял способ определения времени по солнцу, луне и звездам. У меня, к примеру, дядя довольно не плохо справляется с этой задачей, причем даже без компаса :)))
                                                                                            0
                                                                                            Вау, интересная вещь!
                                                                                              +1
                                                                                              Мне понравились троичные часы, о троичной логике тут писали недавно.

                                                                                              (Синхрон)
                                                                                              0
                                                                                              juick.com/150795 Скрипт на bash для conky реализует похожий функционал
                                                                                                +2
                                                                                                А я хочу себе не двоичные, а троичные часы, небольшой экранчик и 4 гармоники на экране, чистый дзен на такие смотреть trinary.ru/projects/sinchron/
                                                                                                  0
                                                                                                  Я бы тоже такие взял. А хотя бы для Windows есть такие, а то у тринари я вижу только скринсейвер на макос.
                                                                                                    +2
                                                                                                    тут вот есть под Винду скринсейвер, правда не знаю насколько рабочий ;)
                                                                                                    www.codeplex.com/Sinchron
                                                                                                      +1
                                                                                                      Спасибо, работает =)
                                                                                                  0
                                                                                                  А откуда Вам покупали такие часы? По приведенной ссылке только каталог, а дистрибьютора в моей стране нету.
                                                                                                    0
                                                                                                    Кстати, мне большое вот большое такой способ запоминания стандартных двоичных кодов десятичных чисел понравился:
                                                                                                    1010 = 8+2 = 10
                                                                                                    8421

                                                                                                    Т.е. тут первая цифра — единица, ей соотв. ноль, тогда ноль, вторая цифра — двойка, ей соотв. 1, т.е. 2 и т.д.

                                                                                                    1111 = 8+4+2+1 = 15
                                                                                                    8421

                                                                                                    101 = 4+1 = 5
                                                                                                    421
                                                                                                      0
                                                                                                      Нас с этим «хитрым способом» познакомили на уроках информатики в 8-м классе, и я знать не знал, что нас посвятили в какое-то «тайное знание». Более того: я другого способа как-то и представить не могу, кроме как использование степеней двойки. Ибо использование степени основания — основополагающий принцип составления чисел в любой системе счисления (включая десятичную).

                                                                                                      a1f0 = 10*16^3 + 1*16^2 + 15*16^1 + 0*16^0 - шестнадцатиричная
                                                                                                      2341 = 2*10^3 + 3*10^2 + 4*10^1 + 1*10^0 - десятичная
                                                                                                      1010 = 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 - двоичная
                                                                                                      
                                                                                                        0
                                                                                                        Ну, просто мне показалось такое «примитивное» объяснение более лёгким.
                                                                                                      0
                                                                                                      Уже полгода крутится двоичный таймер на koibas.ru — когда открытие сайта? ;)
                                                                                                        0
                                                                                                        судя по исходнику — Aug 1, 2009
                                                                                                          0
                                                                                                          Там можно и не по исходнику посчитать. Нужно найти разряд, который отсчитывает секунды. Всё что слева — время в секундах до открытия, справа — типа эмуляция бесконечно точного таймера с дискретным отображением )
                                                                                                            0
                                                                                                            либо я торможу, либо мой браузер, но у меня было целых _пять_ разрядов, которые я подозревал в том, что они отображают секунды.
                                                                                                            посчитав по одному из них, я получил какую-то совершенно дикую сумму, плюнул, и посмотрел исходник :)
                                                                                                              0
                                                                                                              На данный момент там всего 22 значимых разряда, если смотреть первую строчку слева на право. Последний — секунды )
                                                                                                        0
                                                                                                        а можно бинарник под Win?
                                                                                                          0
                                                                                                          Вот хорошие бинарные часы для трея: TPClock
                                                                                                            0
                                                                                                            И тоже не двоичные, а двоично-десятичные :(
                                                                                                              0
                                                                                                              Как раз двоичные.
                                                                                                            0
                                                                                                            А у меня под убунтой не компилится, а так хотелось :(

                                                                                                            ~/Downloads$ cd zoclock/
                                                                                                            ~/Downloads/zoclock$ ls
                                                                                                            COPYING MANIFEST README src zoclock.pro
                                                                                                            ~/Downloads/zoclock$ qmake
                                                                                                            ~/Downloads/zoclock$ ls
                                                                                                            bin build COPYING Makefile MANIFEST README src zoclock.pro
                                                                                                            ~/Downloads/zoclock$ make
                                                                                                            g++ -c -pipe -g -Wall -W -O2 -D_REENTRANT -DZOCVERSION=1.0.0 -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/include/qt3 -Ibuild/ -o build/popupmenu.o src/popupmenu.cpp
                                                                                                            make: g++: Command not found
                                                                                                            make: *** [build/popupmenu.o] Error 127
                                                                                                            • UFO just landed and posted this here
                                                                                                                0
                                                                                                                h0rr0rr_drag0n прав. Или у вас нет g++, или к нему не прописан путь. И то и другое очень странно.
                                                                                                                Попробуйте поискать g++:
                                                                                                                $ find / -name 'g++'
                                                                                                                если он нашёлся, то посмотрите, прописан ли путь к нему
                                                                                                                $ echo $PATH
                                                                                                                  +1
                                                                                                                  >Или у вас нет g++, или к нему не прописан путь. И то и другое очень странно.

                                                                                                                  Ничего странного: в Убунте действительно по дефолту не установлен g++ :)
                                                                                                                  Так что решение проблемы — $ sudo aptitude install g++
                                                                                                                    0
                                                                                                                    теперь следующая проблема :)

                                                                                                                    ~/Downloads/zoclock$ make
                                                                                                                    g++ -c -pipe -g -Wall -W -O2 -D_REENTRANT -DZOCVERSION=1.0.0 -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/include/qt3 -Ibuild/ -o build/popupmenu.o src/popupmenu.cpp
                                                                                                                    In file included from src/popupmenu.cpp:20:
                                                                                                                    src/popupmenu.h:23:17: error: QMenu: No such file or directory
                                                                                                                    In file included from src/popupmenu.cpp:20:
                                                                                                                    src/popupmenu.h:26: error: expected class-name before ‘{’ token
                                                                                                                    src/popupmenu.h:28: error: ISO C++ forbids declaration of ‘Q_OBJECT’ with no type
                                                                                                                    src/popupmenu.h:30: error: expected ‘;’ before ‘typedef’
                                                                                                                    src/popupmenu.h:33: error: ISO C++ forbids declaration of ‘QAction’ with no type
                                                                                                                    src/popupmenu.h:33: error: expected ‘;’ before ‘*’ token
                                                                                                                    src/popupmenu.h:36: error: expected `)' before ‘*’ token
                                                                                                                    src/popupmenu.h:41: error: expected primary-expression before ‘void’
                                                                                                                    src/popupmenu.h:41: error: ISO C++ forbids declaration of ‘signals’ with no type
                                                                                                                    src/popupmenu.h:41: error: expected ‘;’ before ‘void’
                                                                                                                    src/popupmenu.h:43: error: expected `:' before ‘slots’
                                                                                                                    src/popupmenu.h:44: error: expected primary-expression before ‘void’
                                                                                                                    src/popupmenu.h:44: error: ISO C++ forbids declaration of ‘slots’ with no type
                                                                                                                    src/popupmenu.h:44: error: expected ‘;’ before ‘void’
                                                                                                                    src/popupmenu.cpp:23: error: expected `)' before ‘*’ token
                                                                                                                    src/popupmenu.cpp: In member function ‘bool PopupMenu::is_window_locked()’:
                                                                                                                    src/popupmenu.cpp:63: error: ‘lock_pos’ was not declared in this scope
                                                                                                                    src/popupmenu.cpp: In member function ‘void PopupMenu::set_window_lock(bool)’:
                                                                                                                    src/popupmenu.cpp:69: error: ‘lock_pos’ was not declared in this scope
                                                                                                                    src/popupmenu.cpp: At global scope:
                                                                                                                    src/popupmenu.cpp:76: error: no ‘void PopupMenu::color_0()’ member function declared in class ‘PopupMenu’
                                                                                                                    src/popupmenu.cpp: In member function ‘void PopupMenu::color_1()’:
                                                                                                                    src/popupmenu.cpp:83: error: ‘emit’ was not declared in this scope
                                                                                                                    src/popupmenu.cpp:83: error: expected `;' before ‘set_color’
                                                                                                                    make: *** [build/popupmenu.o] Error 1
                                                                                                                      0
                                                                                                                      Это не находятся файлы заголовков. У вас, видимо, не стоит девелоперская часть Qt. Или стоит, но в нестандартном месте (что мало вероятно). Спросите у знающих людей, как в вашем дистрибутиве поставить девелоперскую часть Qt. Или погуглите.
                                                                                                                      Вам надо сделать что-то в таком духе
                                                                                                                      sudo apt-get install libqt4-dev
                                                                                                                      ключевые моменты — цифра «4» и префикс "-dev"; остальное может отличаться
                                                                                                                        0
                                                                                                                        Поставил libqt4-dev — не помогло… больше идей нет? :)
                                                                                                                          0
                                                                                                                          Ошибка осталась той же!
                                                                                                                            0
                                                                                                                            Прежде всего, всё сотрите, переразверните архив и снова сделайте qmake. Возможно, теперь qmake правильно найдёт все пути и сделает правильный Makefile. Если это не поможет — пишиет :-) будем дальше разбираться :-)
                                                                                                                            Спасибо вам за упорство :-)
                                                                                                                              0
                                                                                                                              Это вам спасибо за отзывчивость :)

                                                                                                                              Но, к сожалению, это не помогло.
                                                                                                                              Меня смущает, что qmake отрабатывает моментально и не дает вывода. И еще одна вещь — появляющиеся после qmake каталоги build и bin — пусты, это нормально?)
                                                                                                                                +1
                                                                                                                                Нормально. build наполнятеся временными файлами во время сборки (а её у Вас пока не происходит), а в bin потом кладётся готовый бинарник.
                                                                                                                                  0
                                                                                                                                  Я предлагаю такое решение.

                                                                                                                                  1. Сперва поищите, куда же всё встало
                                                                                                                                  find / -type f -name 'QMenu'
                                                                                                                                  (Слово QMenu потому, что ваша ошибка «error: QMenu: No such file or directory») Я на это получаю строчку /usr/local/include/qt4/QtGui/QMenu, у вас должно получиться что-то в этом же духе

                                                                                                                                  2. Открываете файл Makefile, находите там строчку вида
                                                                                                                                  INCPATH = -I… (она обычно очень длинная)
                                                                                                                                  В неё дописываете "-I ваш путь к QMenu" (у меня там есть соотвествующая строка "-I/usr/local/include/qt4/QtGui"; у меня её qmake сам создаёт, как это и должно быть)

                                                                                                                                  3. make
                                                                                                                                  (qmake больше не знапускайте! он перепишет Makefile назад и потрёт всю вашу работу)

                                                                                                                                  4. Если снова возникли похожие ошибки — повторяем итерацию :-)
                                                                                                                                    0
                                                                                                                                    Нужно будет тогда добавить не только путь к QtGui, но и к QtCore, потому что у Вас и оттуда классы используются (QTime, QSettings).

                                                                                                                                    А можно решить проблему раз и навсегда, без вмешательства со стороны пользователей ;)
                                                                                                                                    Патч тут: pastebin.com/m44be2b67
                                                                                                                                      0
                                                                                                                                      Чёрт, там съедаются @@ в начале строк =\
                                                                                                                                      Продублировал патч тут: snipt.org/kkll
                                                                                                                                      0
                                                                                                                                      Прошу прощения за назойливость :)

                                                                                                                                      Путь к QMenu в Makefile я прописал. Начало ругаться вот так:

                                                                                                                                      /usr/include/qt4/QtGui/qmenu.h:45:27: error: QtGui/qwidget.h: No such file or directory
                                                                                                                                      /usr/include/qt4/QtGui/qmenu.h:46:28: error: QtCore/qstring.h: No such file or directory
                                                                                                                                      /usr/include/qt4/QtGui/qmenu.h:47:25: error: QtGui/qicon.h: No such file or directory
                                                                                                                                      /usr/include/qt4/QtGui/qmenu.h:48:27: error: QtGui/qaction.h: No such file or directory

                                                                                                                                      Я подправил файл qmenu.h и удалил QtGui/ и QtCore/, правильно ли я сделал? Может ли это помешать корректной работе других приложений? ))

                                                                                                                                      Потом стало ругаться вот так:

                                                                                                                                      /usr/include/qt4/QtGui/qicon.h:45:28: error: QtCore/qglobal.h: No such file or directory
                                                                                                                                      /usr/include/qt4/QtGui/qicon.h:46:26: error: QtCore/qsize.h: No such file or directory
                                                                                                                                      /usr/include/qt4/QtGui/qicon.h:47:26: error: QtCore/qlist.h: No such file or directory
                                                                                                                                      /usr/include/qt4/QtGui/qicon.h:48:27: error: QtGui/qpixmap.h: No such file or directory

                                                                                                                                      Я поменял файл qicon.h.

                                                                                                                                      И теперь стало ругаться совсем уж не понятно и у меня кончились идеи по поводу того что делать: Р

                                                                                                                                      ~/Downloads/zoclock$ make
                                                                                                                                      g++ -c -pipe -g -Wall -W -O2 -D_REENTRANT -DZOCVERSION=1.0.0 -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/include/qt3 -Ibuild/ -I/usr/include/qt4/QtGui/ -I/usr/include/qt4/QtGui/QCore -o build/popupmenu.o src/popupmenu.cpp
                                                                                                                                      In file included from /usr/include/qt4/QtGui/qmenu.h:47,
                                                                                                                                      from /usr/include/qt4/QtGui/QMenu:1,
                                                                                                                                      from src/popupmenu.h:23,
                                                                                                                                      from src/popupmenu.cpp:20:
                                                                                                                                      /usr/include/qt4/QtGui/qicon.h:50: error: ‘QT_BEGIN_HEADER’ does not name a type
                                                                                                                                      /usr/include/qt4/QtGui/qicon.h:60: error: function definition does not declare parameters
                                                                                                                                      /usr/include/qt4/QtGui/qicon.h:128: error: expected constructor, destructor, or type conversion before ‘(’ token
                                                                                                                                      /usr/include/qt4/QtGui/qicon.h:132: error: expected initializer before ‘&’ token
                                                                                                                                      /usr/include/qt4/QtGui/qicon.h:133: error: expected initializer before ‘&’ token
                                                                                                                                      /usr/include/qt4/QtGui/qicon.h:140: error: ‘QT_END_NAMESPACE’ does not name a type
                                                                                                                                      In file included from /usr/include/qt3/qaction.h:46,
                                                                                                                                      from /usr/include/qt4/QtGui/qmenu.h:48,
                                                                                                                                      from /usr/include/qt4/QtGui/QMenu:1,
                                                                                                                                      from src/popupmenu.h:23,
                                                                                                                                      from src/popupmenu.cpp:20:
                                                                                                                                      /usr/include/qt3/qiconset.h:80: error: ‘QIconFactory’ has not been declared
                                                                                                                                      In file included from /usr/include/qt4/QtGui/QMenu:1,
                                                                                                                                      from src/popupmenu.h:23,
                                                                                                                                      from src/popupmenu.cpp:20:
                                                                                                                                      /usr/include/qt4/QtGui/qmenu.h:54: error: ‘QT_BEGIN_HEADER’ does not name a type
                                                                                                                                      /usr/include/qt4/QtGui/qmenu.h:68: error: function definition does not declare parameters
                                                                                                                                      /usr/include/qt4/QtGui/qmenu.h:424: error: ‘QT_END_NAMESPACE’ does not name a type
                                                                                                                                      src/popupmenu.cpp:23: error: ‘PopupMenu’ has not been declared
                                                                                                                                      src/popupmenu.cpp:23: error: ISO C++ forbids declaration of ‘PopupMenu’ with no type
                                                                                                                                      src/popupmenu.cpp: In function ‘int PopupMenu(QWidget*)’:
                                                                                                                                      src/popupmenu.cpp:24: error: only constructors take base initializers
                                                                                                                                      src/popupmenu.cpp:27: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:28: error: ‘tr’ was not declared in this scope
                                                                                                                                      src/popupmenu.cpp:28: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:29: error: ‘class QAction’ has no member named ‘setCheckable’
                                                                                                                                      src/popupmenu.cpp:30: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:31: error: ‘lock_pos’ was not declared in this scope
                                                                                                                                      src/popupmenu.cpp:32: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:33: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:34: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:35: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:35: error: ‘connect’ was not declared in this scope
                                                                                                                                      src/popupmenu.cpp:36: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:37: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:38: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:39: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:40: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:42: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:43: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:44: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:46: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:47: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:49: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:50: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:52: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:53: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:54: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:55: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp:57: error: invalid use of ‘this’ in non-member function
                                                                                                                                      src/popupmenu.cpp: At global scope:
                                                                                                                                      src/popupmenu.cpp:61: error: ‘PopupMenu’ is not a class or namespace
                                                                                                                                      src/popupmenu.cpp: In function ‘bool is_window_locked()’:
                                                                                                                                      src/popupmenu.cpp:63: error: ‘lock_pos’ was not declared in this scope
                                                                                                                                      src/popupmenu.cpp: At global scope:
                                                                                                                                      src/popupmenu.cpp:67: error: ‘PopupMenu’ is not a class or namespace
                                                                                                                                      src/popupmenu.cpp: In function ‘void set_window_lock(bool)’:
                                                                                                                                      src/popupmenu.cpp:69: error: ‘lock_pos’ was not declared in this scope
                                                                                                                                      src/popupmenu.cpp: At global scope:
                                                                                                                                      src/popupmenu.cpp:76: error: ‘PopupMenu’ is not a class or namespace
                                                                                                                                      src/popupmenu.cpp: In function ‘void color_0()’:
                                                                                                                                      src/popupmenu.cpp:78: error: ‘set_color’ was not declared in this scope
                                                                                                                                      src/popupmenu.cpp: At global scope:
                                                                                                                                      src/popupmenu.cpp:81: error: ‘PopupMenu’ is not a class or namespace
                                                                                                                                      src/popupmenu.cpp: In function ‘void color_1()’:
                                                                                                                                      src/popupmenu.cpp:83: error: ‘set_color’ was not declared in this scope
                                                                                                                                      make: *** [build/popupmenu.o] Error 1
                                                                                                                                        0
                                                                                                                                        Нее… править хедеры это не хорошо. Вам надо было просто добавить ещё путей в INCPATH в Makefile. Видимо вот такой /usr/include/qt4/

                                                                                                                                        Как-то у вас всё не кряжно стоит :-) А вы не пробовали патч, который тут Mezomish предалагает?

                                                                                                                                        У вас жабер есть? Если — да (а ваш кураж ещё не иссяк :-)), — напишите мне в личку.
                                                                                                                                          0
                                                                                                                                          Не-е-е, править хедеры лучше не надо. Верните всё как было :)

                                                                                                                                          Потом сохраните патч отсюда (там в конце есть ссылка «Download») в каталог zoclock (к примеру, под именем «headers_fix.patch»), после чего выполните в консоли команду
                                                                                                                                          $ patch -p0 < headers_fix.patch

                                                                                                                                          После этого должно собираться без проблем.
                                                                                                                                            0
                                                                                                                                            Теперь вот так:

                                                                                                                                            ~/Downloads/zoclock$ make
                                                                                                                                            g++ -c -pipe -g -Wall -W -O2 -D_REENTRANT -DZOCVERSION=1.0.0 -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/include/qt3 -Ibuild/ -o build/popupmenu.o src/popupmenu.cpp
                                                                                                                                            In file included from src/popupmenu.cpp:20:
                                                                                                                                            src/popupmenu.h:23:23: error: QtGui/QMenu: No such file or directory
                                                                                                                                            In file included from src/popupmenu.cpp:20:
                                                                                                                                            src/popupmenu.h:26: error: expected class-name before ‘{’ token
                                                                                                                                            src/popupmenu.h:28: error: ISO C++ forbids declaration of ‘Q_OBJECT’ with no type
                                                                                                                                            src/popupmenu.h:30: error: expected ‘;’ before ‘typedef’
                                                                                                                                            src/popupmenu.h:33: error: ISO C++ forbids declaration of ‘QAction’ with no type
                                                                                                                                            src/popupmenu.h:33: error: expected ‘;’ before ‘*’ token
                                                                                                                                            src/popupmenu.h:36: error: expected `)' before ‘*’ token
                                                                                                                                            src/popupmenu.h:41: error: expected primary-expression before ‘void’
                                                                                                                                            src/popupmenu.h:41: error: ISO C++ forbids declaration of ‘signals’ with no type
                                                                                                                                            src/popupmenu.h:41: error: expected ‘;’ before ‘void’
                                                                                                                                            src/popupmenu.h:43: error: expected `:' before ‘slots’
                                                                                                                                            src/popupmenu.h:44: error: expected primary-expression before ‘void’
                                                                                                                                            src/popupmenu.h:44: error: ISO C++ forbids declaration of ‘slots’ with no type
                                                                                                                                            src/popupmenu.h:44: error: expected ‘;’ before ‘void’
                                                                                                                                            src/popupmenu.cpp:23: error: expected `)' before ‘*’ token
                                                                                                                                            src/popupmenu.cpp: In member function ‘bool PopupMenu::is_window_locked()’:
                                                                                                                                            src/popupmenu.cpp:63: error: ‘lock_pos’ was not declared in this scope
                                                                                                                                            src/popupmenu.cpp: In member function ‘void PopupMenu::set_window_lock(bool)’:
                                                                                                                                            src/popupmenu.cpp:69: error: ‘lock_pos’ was not declared in this scope
                                                                                                                                            src/popupmenu.cpp: At global scope:
                                                                                                                                            src/popupmenu.cpp:76: error: no ‘void PopupMenu::color_0()’ member function declared in class ‘PopupMenu’
                                                                                                                                            src/popupmenu.cpp: In member function ‘void PopupMenu::color_1()’:
                                                                                                                                            src/popupmenu.cpp:83: error: ‘emit’ was not declared in this scope
                                                                                                                                            src/popupmenu.cpp:83: error: expected `;' before ‘set_color’
                                                                                                                                            make: *** [build/popupmenu.o] Error 1

                                                                                                                                            Таже ошибка, которая была когда я правил хеадеры сам)
                                                                                                                                              0
                                                                                                                                              А qmake Вы перед этим вызывали ещё раз (чтобы отменить те изменения, которые Вы там сделали)?
                                                                                                                                                0
                                                                                                                                                Т.е. я имел в виду «отменить те изменения в Makefile, которые Вы там сделали».

                                                                                                                                                В общем, должно быть так:
                                                                                                                                                1) все изменения, которые Вы сделали в кутешных хедерах — отменены, и хедеры находятся в первоначальном виде
                                                                                                                                                2) наложен мой патч
                                                                                                                                                3) qmake
                                                                                                                                                4) make

                                                                                                                                                Ради чистоты эксперимента можно попробовать удалить все исходники со всеми изменениями и проделать всё с начала (распаковав архив с «чистыми» исходниками).
                                                                                                                                                  0
                                                                                                                                                  Не помогает…

                                                                                                                                                  Причем патч выдает одну ошибку:

                                                                                                                                                  ~/Downloads/zoclock$ sudo patch -p0 < fix.patch
                                                                                                                                                  patching file src/zocwidget.cpp
                                                                                                                                                  Hunk #1 FAILED at 17.
                                                                                                                                                  1 out of 1 hunk FAILED — saving rejects to file src/zocwidget.cpp.rej
                                                                                                                                                  patching file src/zoclock.cpp
                                                                                                                                                  patching file src/zocwidget.h
                                                                                                                                                  patching file src/settings.h
                                                                                                                                                  patching file src/zocdot.h
                                                                                                                                                  patching file src/popupmenu.h
                                                                                                                                                    0
                                                                                                                                                    Возможно, у Вас другая версия файла (я из свн обновлялся). Попробуйте тогда в проблемном файле src/zocwidget.cpp вручную заменить

                                                                                                                                                    #include <QFrame>
                                                                                                                                                    #include <QGridLayout>
                                                                                                                                                    #include <QMouseEvent>
                                                                                                                                                    #include <QTime>
                                                                                                                                                    #include <QMessageBox>
                                                                                                                                                    #include <QColorDialog>

                                                                                                                                                    на

                                                                                                                                                    #include <QtCore/QTime>
                                                                                                                                                    #include <QtGui/QFrame>
                                                                                                                                                    #include <QtGui/QGridLayout>
                                                                                                                                                    #include <QtGui/QMouseEvent>
                                                                                                                                                    #include <QtGui/QMessageBox>
                                                                                                                                                    #include <QtGui/QColorDialog>
                                                                                                                                                      0
                                                                                                                                                      Неа, не помогло… Видимо, тут уже ничего не поможет: Р
                                                                                                                                                        0
                                                                                                                                                        Поможет! %)
                                                                                                                                                        Держите архив с уже патчеными исходниками.
                                                                                                                                                          0
                                                                                                                                                          Чего-то как-то совсем не судьба:

                                                                                                                                                          gzip: stdin: decompression OK, trailing garbage ignored
                                                                                                                                                          tar: Child returned status 2
                                                                                                                                                          tar: Error exit delayed from previous errors

                                                                                                                                                          :))))))))))))))))))))))))
                                                                                                                                                            0
                                                                                                                                                            Жжесть! %)))

                                                                                                                                                            Шлите в личку контакты — вышлю архив мылом :)))
                                                                                                                                                              0
                                                                                                                                                              Я думаю, что у вас что-то глобально криво в системе. И скорее всего qmake стоит от одной сборки, а все девелоперсеие файлы — от другой. Надо проверить версии пакетов — наверняка косяк выползет.

                                                                                                                                                              А если просто хотите собрать, не ломая систему (глобальные обновления библиотек могу привести к значительному перерасходу нервных клеток :-)), то проще всего, собрать qt отдельно. Посто не от рута, а от обычного пользоателя.

                                                                                                                                                              Я в понедельник появлюсь в жабере — можно там дообсудить эту тему.
                                                                                                                                                    0
                                                                                                                                                    Ну всё, разобрались! Блин, говорила мне мама: «будь внимательнее!» — не слушал я маму…

                                                                                                                                                    В выхлопе make нам черным по белому говорит, что он пытается подключить include-path от Qt3. А почему? Да потому что мейкфайл был сгенерирован для Qt3. А был он сгенерирован для Qt3 потому что в системе стоят обе dev-версии, и qmake указывает на qmake-qt3.

                                                                                                                                                    При использовании qmake-qt4 всё собирается и работает, и патч мой не нужен %)
                                                                                                                                                      0
                                                                                                                                                      Возможно они изначально и не стояли, просто я доставил их… и забыл. )

                                                                                                                                                      В любом случае больше вам спасибо за помощь!

                                                                                                                                                      И большое спасибо автору за интересную программу, работает у меня теперь в правом верхнем углу)
                                                                                                                                                        0
                                                                                                                                                        Да не за что.
                                                                                                                                                        А автору действительно спасибо — у меня эти часики тоже висят в углу. Стараюсь ориентироваться по ним (пока что сверяясь с обычными) :)
                                                                                                                                                          0
                                                                                                                                                          Еще бы переписать их в виде апплета для гнома, чтобы на панель их добавить — было бы круто))
                                                                                                                                    0
                                                                                                                                    В некоторых системах (в частности, в Убунте :)) в include path прописан только основной каталог Qt /usr/include/qt4/, а подкаталоги QtCore, QtGui и так далее — не прописаны. Поэтому я давно взял в привычку писать не #include <QMenu>, а #include <QtGui/QMenu> и так далее.
                                                                                                                                      0
                                                                                                                                      Хм… видимо, в новых Убунтах пути таки поправили, потому что на 9.04 собралось без проблем.
                                                                                                                                        0
                                                                                                                                        У меня 9.04, правда netbook remix… Возможно в ней пути не правили… На домашнем декстопе, на котором 9.04, я еще не проверял.
                                                                                                                              0
                                                                                                                              А я себе сделал хардварные :P

                                                                                                                              www.youtube.com/watch?v=uMUGqQlCO0M

                                                                                                                              Only users with full accounts can post comments. Log in, please.