2014-09-18 6 views
4

QWinTaskbarProgress을 사용하기 위해 발견 한 예제를 따랐습니다. 내가 Qt Creator (Qt는 5.3.1) 내 mainwindow.cpp에 표준 Qt Widgets Application를 생성은 다음과 같습니다 : 나는 작업 표시 줄 오버레이 할 수있는 아이콘과 응용 프로그램을 시작한 후 50% 진행 표시 줄을 표시하지만, 작업 표시 줄 것으로 예상 QWinTaskbarProgress에서 내가 뭘 잘못하고 있니?

#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; 
} 

코드를 작성하지 않은 것처럼 정상적으로 보입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

중복 가능성 [QWinTaskbarProgress 표시하지 않을 것이다 (http://stackoverflow.com/questions/24840941/qwintaskbarprogress-wont- show) – thirtythreeforty

답변

5

실제로 "m_taskbarButton-> setWindow (windowHandle());"를 호출하는 것처럼 보입니다. " in QMainWindow 생성자가 작동하지 않고 setVisible (true) 또는 show()를 호출 한 후에도 QWinTaskbarProgress가 전혀 표시되지 않습니다.

창이 에서처럼 도시되면 그것은 호출되어야

:

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

    e->accept(); 
} 
+0

답변 해 주셔서 감사합니다. 그래서이 정의에 넣었으므로 비 Windows 시스템에서 다르게 동작합니까? 그렇다면 버그라고 부를 수 있을까요? – Chris

+0

당신은 환영합니다 :) QWindow가 보여 지거나 숨겨진 상태로 동일해야하기 때문에 예, 의심스러운 것 같습니다 : (QtinExtras 라이브러리 인) QWinTaskbarButton 만 존재하기 때문에 #ifdef가 Btw입니다. – Kervala

+0

여전히 해결 방법은, 그러나 나는 그것을 다른 사람보다 더 좋아한다. 정의에 대한 내 질문에 대해 미안해, 내가 물었을 때 나는 아주 피곤했을 것이다. ;-) – Chris

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); 
} 

그리고 이제 작동합니다!

+0

이것은 단지 일시적인 해결책 일뿐입니다. @Kervala의 대답은 실제 해결책입니다. – KovBal

관련 문제