Qt4应用程序图标没有出现在Windows任务栏上

Qt4 application icon not appearing on Windows taskbar

本文关键字:Windows 任务栏 应用程序 图标 Qt4      更新时间:2023-10-16

我的Qt4应用程序启动时,Windows 7和Windows XP的任务栏上没有出现图标。我怎样才能让它出现?

当我最小化我的应用程序,它变成一个小的没有窗口的标题栏在左下方。

顺便说一下,我在我的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();
}

下面是mainwindow声明的一部分:

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

我找到了!必须添加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();
}