我按照我发现的例子来使用QWinTaskbarProgress
。我在Qt Widgets Application
(Qt 5.3.1)中创建了标准Qt Creator
,我的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%
进度条,但任务栏看起来很正常,就像没有编码任何内容一样。我做错了什么?
答案 0 :(得分:7)
事实上,它似乎在调用" m_taskbarButton-> setWindow(windowHandle());"在QMainWindow构造函数中,即使在调用setVisible(true)或show()之后,QWinTaskbarProgress仍然无法显示。
一旦Window显示如下,就必须调用它:
void MainWindow::showEvent(QShowEvent *e)
{
#ifdef Q_OS_WIN32
m_taskbarButton->setWindow(windowHandle());
#endif
e->accept();
}
答案 1 :(得分:0)
您和我的代码与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);
}
现在它有效!