4

我按照我找到的示例来使用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

2 回答 2

8

其实好像是在调用“m_taskbarButton->setWindow(windowHandle());” 在 QMainWindow 构造函数中不起作用,即使在调用 setVisible(true) 或 show() 之后,QWinTaskbarProgress 也不会显示。

一旦窗口显示如下,就必须调用它:

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

    e->accept();
}
于 2014-11-13T14:12:31.960 回答
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);
}

现在它起作用了!

于 2014-09-18T16:19:34.913 回答