11

我正在使用 windows7 和 Qt5.3.0 我在下面添加到我的 MainWindow 的构造函数中,但我的任务栏上没有显示任何内容。我错过了什么?

QWinTaskbarProgress * pTaskbarProgress = new QWinTaskbarProgress(this);
pTaskbarProgress->setMinimum(0);
pTaskbarProgress->setMaximum(100);
pTaskbarProgress->setValue(50);
pTaskbarProgress->show();
4

3 回答 3

12

其实好像叫

button->setWindow(widget->windowHandle());

在 QMainWindow 构造函数中不起作用,即使在调用setVisible(true)或之后 QWinTaskbarProgress 也不会显示show()

如果在 QMainWindow 构造函数中创建,则必须在 Window 显示后调用它,如下所示:

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

    e->accept();
}
于 2014-11-13T14:01:34.233 回答
9

请参阅文档中的示例

QWinTaskbarButton *button = new QWinTaskbarButton(widget);
button->setWindow(widget->windowHandle());
button->setOverlayIcon(QIcon(":/loading.png"));

QWinTaskbarProgress *progress = button->progress();
progress->setVisible(true);
progress->setValue(50);

在我看来,您必须将其设置为 QWinTaskbarButton 的一部分。

于 2014-07-19T13:45:02.317 回答
3

这个类背后的历史是它是 的一部分QWinTaskbarButton,因此它本质上与那个类紧密耦合。您可以看到开始重构并因此解耦的相关上游提交:

从 QWinTaskbarButton 中重构 QWinTaskbarProgress

你是对的,它在 QWinTaskbarProgress 的文档中并不太明确,所以这可能会在上游得到改进,但是QWinTaskbarButton 示例以及音乐播放器示例说明了这一点,即你必须替换这一行:

QWinTaskbarProgress * pTaskbarProgress = new QWinTaskbarProgress(this);

和:

QWinTaskbarButton * pTaskbarButton = new QWinTaskbarButton(this);
pTaskbarButton->setWindow(windowHandle());
QWinTaskbarProgress * pTaskbarProgress = pTaskbarButton->progress();

您可能希望使用自定义图像或类似音乐播放器示例的内容为任务栏按钮设置覆盖图标:

pTaskbarButton->setOverlayIcon(style()->standardIcon(QStyle::SP_MediaPlay));
于 2014-07-19T14:34:39.673 回答