【问题标题】:Qt4 application icon not appearing on Windows taskbarQt4 应用程序图标未出现在 Windows 任务栏上
【发布时间】:2013-04-13 15:57: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();
}

这是主窗口声明的一部分:

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

【问题讨论】:

  • 需要更多细节!请发布您的问题的最小(自包含、编译)代码示例。
  • 好的。添加了更多细节。
  • 你试过 setWindowIcon(const QIcon& icon) 吗?
  • 是的,它在 setupUI 函数中完成。我将添加一个sn-p。
  • 哦,这是很奇怪的实现。您期望的结果是什么?

标签: c++ qt qt4 cmake


【解决方案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();
}

【讨论】:

  • 这对我来说很有趣。我没有为我使用 Qt / CMake / VisualStudio 构建的每个应用程序设置 WS_EX_APPWINDOW 或任何其他窗口标志和图标。
  • 我正在使用 Qt / CMake / MinGW。但也可能是我没有在 Qt Designer 中设置某些属性。
猜你喜欢
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
相关资源
最近更新 更多