2013-04-13 60 views
1

我的Qt4應用程序啓動後,不會顯示爲Windows 7和Windows XP任務欄上的圖標。我怎樣才能讓它出現?Qt4應用程序圖標不出現在Windows任務欄上

當我最小化我的應用程序時,它會變成左下角的小窗口標題欄。

順便說一下,我做我的CMakeLists.txt以下,以防止控制檯窗口從我的應用程序一起標記:

if(WIN32) 
    add_executable(codequery WIN32 ${CODEQUERY_SRCS} ${CODEQUERY_MOC_SRCS} ${CODEQUERY_RC_SRCS} ${CODEQUERY_UI_HDRS} ${QM}) 
else() 
    add_executable(codequery ${CODEQUERY_SRCS} ${CODEQUERY_MOC_SRCS} ${CODEQUERY_RC_SRCS} ${CODEQUERY_UI_HDRS} ${QM}) 
endif() 

這是我的主要功能:

#include "mainwindow.h" 

int main(int argc, char *argv[]) 
{ 
QApplication app(argc, argv); 
QMainWindow *wndw = new QMainWindow; 
mainwindow mw(wndw, &app); 

mw.show(); 
return app.exec(); 
} 

這裏的主窗口的聲明的一部分:

namespace Ui { 
    class MainWindow; 
} 

class mainwindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
Ui::MainWindow *ui; 
mainwindow(QMainWindow *parent = NULL, QApplication *app = NULL); 
virtual ~mainwindow(); 

下面是它的構造函數的一部分:

#include "mainwindow.h" 
#include "ui_mainWindow.h" 

mainwindow::mainwindow(QMainWindow *parent, QApplication *app) 
:QMainWindow(parent) 
,m_app(app) 
,ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
} 

GUI部分是使用Qt Designer設計的,它生成爲ui_mainWindow.h。

的setupUi部分功能:

void setupUi(QMainWindow *MainWindow) 
{ 
    if (MainWindow->objectName().isEmpty()) 
     MainWindow->setObjectName(QString::fromUtf8("MainWindow")); 
    MainWindow->resize(629, 600); 
    QIcon icon; 
    icon.addFile(QString::fromUtf8(":/mainwindow/images/logo.png"), QSize(), QIcon::Normal, QIcon::Off); 
    MainWindow->setWindowIcon(icon); 
+0

需要更多詳細信息!請發佈您的問題的最小(自包含,編譯)代碼示例。 –

+0

好的。更多細節補充。 – ruben2020

+0

你試過setWindowIcon(const QIcon&icon)嗎? – IKM2007

回答

1

我找到了!必須添加WS_EX_APPWINDOW。

#ifdef _WIN32 
#include <windows.h> 
#endif 

#include "mainwindow.h" 


int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    QMainWindow *wndw = new QMainWindow; 
    mainwindow mw(wndw, &app); 

    mw.show(); 

#ifdef _WIN32 
    ShowWindow(mw.winId(), SW_HIDE); 
    SetWindowLongPtr(mw.winId(), GWL_EXSTYLE, 
       GetWindowLongPtr(mw.winId(), GWL_EXSTYLE) | WS_EX_APPWINDOW); 
    ShowWindow(mw.winId(), SW_SHOW); 
#endif 

    return app.exec(); 
} 
+0

這對我很有意思。我沒有爲每個使用Qt/CMake/VisualStudio構建的應用程序設置WS_EX_APPWINDOW或任何其他窗口標誌和圖標。 – drescherjm

+0

我正在使用Qt/CMake/MinGW。但也可能是因爲我沒有在Qt Designer中設置一些屬性。 – ruben2020

相關問題