Что я делаю не так с QWinTaskbarProgress?

Я следовал за примерами, которые я нашел, чтобы использовать QWinTaskbarProgress, Я создал стандарт Qt Widgets Application в Qt Creator (Qt 5.3.1) и мой mainwindow.cpp выглядит так:

#include "mainwindow.h"#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

m_taskbarButton = new QWinTaskbarButton(this);
m_taskbarButton->setWindow(windowHandle());
m_taskbarButton->setOverlayIcon(style()->standardIcon(QStyle::SP_MediaPlay));

m_taskbarProgress = m_taskbarButton->progress();
m_taskbarProgress->setVisible(true);
m_taskbarProgress->setRange(0, 100);
m_taskbarProgress->setValue(50);
}

MainWindow::~MainWindow()
{
delete ui;
}

Я ожидал, что значок панели задач будет наложен и показывает 50% Индикатор выполнения после запуска приложения, но панель задач выглядит нормально, как будто ничего не кодировал. Что я делаю неправильно?

4

Решение

На самом деле это похоже на вызов «m_taskbarButton-> setWindow (windowHandle ());» в QMainWindow конструктор не работает и QWinTaskbarProgress не будет отображаться вообще даже после вызова setVisible (true) или show ().

Это должно быть вызвано, как только окно показано как в:

void MainWindow::showEvent(QShowEvent *e)
{
#ifdef Q_OS_WIN32
m_taskbarButton->setWindow(windowHandle());
#endif

e->accept();
}
6

Другие решения

Ваш и мой код очень похож на пример в Qt Documentation, Я понятия не имею, почему, но это не работает на моем компьютере тоже. Но я нашел решение:

Создайте singleShot и установить прогресс в слоте:

В шапке:

private slots:
void echo();

В конструкторе:

QTimer::singleShot(1000,this,SLOT(echo()));
QTimer::singleShot(10,this,SLOT(echo()));//works too

Слот:

void MainWindow::echo()
{

QWinTaskbarButton *button = new QWinTaskbarButton(this);
button->setWindow(windowHandle());
button->setOverlayIcon(style()->standardIcon(QStyle::SP_MediaPlay));

QWinTaskbarProgress *progress = button->progress();
progress->setVisible(true);
progress->setRange(0, 100);
progress->setValue(50);
}

И теперь это работает!

0

По вопросам рекламы [email protected]