Программирование кнопки «Проверить наличие обновлений» для определения изменений в репозитории

У меня есть приложение, которое находится на очень ранней стадии разработки и все еще постоянно обновляется или исправляет ошибки. Программа предназначена для автоматического выполнения многих моих задач по аудиту, и в настоящее время ею пользуются 5-7 человек, которые слышали о ней из уст в уста.

Мне не нравится постоянно рассылать электронные письма с просьбой распространить информацию о выпуске обновлений, поэтому я хотел бы реализовать какую-то кнопку «проверить наличие обновлений». Как я могу сделать что-то подобное?

Кнопка просто проверит наличие нового номера версии в моем репозитории релизов и сообщит пользователю, не устарел ли его номер версии. Это правильный путь для такого рода действий? Или есть более легкий путь?


person Syntactic Fructose    schedule 12.01.2014    source источник
comment
@JBentley Я ценю ответ, я никогда раньше не занимался распространением своего программного обеспечения и никогда не ожидал, что другие люди будут использовать мое приложение. Я чувствую себя ошеломленным, так как не имею ни малейшего понятия, как упаковать мою программу в бинарную загрузку или менеджер пакетов, есть ли у вас какие-либо ссылки, чтобы узнать, как это сделать?   -  person Syntactic Fructose    schedule 13.01.2014
comment
Эта кнопка «проверить наличие обновлений» действительно может использоваться для проверки репозитория на наличие изменений, но когда она будет выпущена, конечные пользователи смогут использовать ее для проверки обновлений приложений, не так ли?   -  person A Person    schedule 13.01.2014
comment
@JBentley: у вас нет менеджера пакетов в Windows, по крайней мере, любого надежного, где может пригодиться обновление.   -  person lpapp    schedule 13.01.2014
comment
@ Gmercer015: какую операционную систему вы используете? Вы ищете решение Qt с сигналами и слотами?   -  person lpapp    schedule 13.01.2014
comment
@LaszloPapp Я стремлюсь к правильному выпуску Windows 7   -  person Syntactic Fructose    schedule 13.01.2014
comment
@ Gmercer015: не могли бы вы пояснить, зачем вам нужен флажок? Не лучше ли было бы использовать QFileSystemWatcher и автоматически отображать всплывающее уведомление, даже не устанавливая флажок?   -  person lpapp    schedule 13.01.2014
comment
@JBentley: ОП должен избегать объявления (и, следовательно, отдельного веб-сайта и т. д.), а обратная связь будет исходить из приложения. Ни одна из ваших идей не поможет решить эту проблему AFAICT.   -  person lpapp    schedule 13.01.2014
comment
@JBentley: 1) Для Windows нет надежного менеджера пакетов. 2) Весь смысл был в том, чтобы избежать проверки сайта/объявления вне приложения. =› Боюсь, ваши комментарии были неуместны, потому что они относились к диспетчеру пакетов и/или веб-сайту (явная проверка, например объявление вне приложения).   -  person lpapp    schedule 13.01.2014
comment
@JBentley: ОП никогда не упоминал VCS. Кажется, это исходит только от тебя. Упоминается даже, что это репозиторий релизов. Это ничем не отличается от репозиториев бинарных пакетов в Linux для различных дистрибутивов и т. д. Если хотите, это зеркало. Боюсь, у вас возникли проблемы с собственной интерпретацией. То, что хочет ОП, кажется мне совершенно разумным. :)   -  person lpapp    schedule 13.01.2014
comment
@LaszloPapp Теперь я вижу, что с моей стороны произошла терминологическая путаница, поэтому я удалил свои комментарии.   -  person JBentley    schedule 13.01.2014


Ответы (1)


Я бы посоветовал даже не использовать для этого флажок, а просто полностью автоматизировать процесс, используя QFileSystemWatcher.

Сначала вам нужно будет добавить желаемый путь для просмотра:

bool QFileSystemWatcher::addPath(const QString и путь)

Добавляет путь к наблюдателю файловой системы, если путь существует. Путь не добавляется, если он не существует или уже отслеживается наблюдателем за файловой системой.

Если путь указывает каталог, сигнал directoryChanged() будет выдан, когда путь будет изменен или удален с диска; в противном случае сигнал fileChanged() выдается, когда путь изменяется, переименовывается или удаляется.

Если просмотр прошел успешно, возвращается true.

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

Примечание. Может существовать ограничение, зависящее от системы, на количество файлов и каталогов, которые можно отслеживать одновременно. Если этот предел достигнут, путь не будет отслеживаться и будет возвращено значение false.

Вы будете подключены к следующему сигналу:

void QFileSystemWatcher::fileChanged(const QString и путь) [сигнал]

Этот сигнал испускается, когда файл по указанному пути изменяется, переименовывается или удаляется с диска.

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

Применяя все это на практике, я бы написал что-то вроде этого:

MyClass::MyClass(QObject *parent) : QObject(parent)
{
    connect(myFileSystemWatcherPointer, SIGNAL(fileChanged(const QString &)), SLOT(handleFileChanged(const QString &)));
    myFileSystemWatcherPoiner->addPath(myFilePath);
}

MyClass::handleFileChanged(const QString &file)
{
    if (file == desiredFile)
        showUpdatePopUp();
}
person lpapp    schedule 12.01.2014