Подтвердить что ты не робот

Как показать прогресс в панели задач Windows 7 (используя Qt)?

Есть ли способ получить доступ к панели прогресса Windows 7 с Qt? В настоящее время я использую Qt 4.7.0 с Qt Creator.

Я уже нашел Q7Goodies, но, к сожалению, он не является бесплатным. Таким образом, это кажется возможным - как я могу получить доступ к панели выполнения вручную (без Visual Studio)?

4b9b3361

Ответ 1

Я думаю, что они использовали функции Win7 API и инкапсулировали их в свою библиотеку. Вы можете вручную включить эти заголовки и использовать их. Здесь вы можете найти тему справки и демонстрационный проект: codeproject.com/KB/vista/SevenGoodiesTaskbarStatus.aspx

Но это только для win7. Не кроссплатформенность. Удачи.

обновить март 05, 2014

Этот вопрос задавали давно, и с тех пор многое изменилось. Для тех, кто задает себе тот же вопрос сегодня (начало 2014 года), мой личный ответ заключается в том, что Qt 5 полностью поддерживает прогресс в панели задач и различные виды красивых дополнений. Подробнее см. QWinTaskbarProgress (upd nov 28, 2016)

Ответ 2

Вы можете использовать класс QWinTaskbarProgress. Чтобы использовать этот класс, вам нужно добавить win32:QT += winextras в ваш .pro файл.

Вот пример кода, показывающий, как показать значение QProgressBar в панели задач Windows (вдохновленный этим примером)

#ifdef _WIN32    //The _WIN32 macro is automatically generated when compiling for Windows
    #include <QWinTaskbarProgress>
    #include <QWinTaskbarButton>
#endif
QProgressBar *progressBar = new QProgressBar;
progressBar->show();
#ifdef _WIN32
    QWinTaskbarButton *windowsTaskbarButton = new QWinTaskbarButton;    //Create the taskbar button which will show the progress
    windowsTaskbarButton->setWindow(progressBar->windowHandle());    //Associate the taskbar button to the progress bar, assuming that the progress bar is its own window
    QWinTaskbarProgress *windowsTaskbarProgress = windowsTaskbarButton->progress();
    windowsTaskbarProgress->show();
    QObject::connect(loadingWindow, &QProgressBar::valueChanged, [windowsTaskbarProgress](int value){
        windowsTaskbarProgress->setValue(value);   //Change the value of the progress in the taskbar when the value of the progress bar changes
    });
#endif