• 8904阅读
  • 17回复

[提问]菜单和工具条上图标显示不了,为什么? [复制链接]

上一主题 下一主题
离线wj025
 
只看楼主 倒序阅读 楼主  发表于: 2013-04-04
本人是初学者。
按照《Qt Creater快速入门》建了应用程序主窗口的测试DEMO,并将几个图标加入资源中,在设计界面已经显示了图标,但程序运行起来没有图标显示。
后看QT自带的DEMO中都有Q_INIT_RESOURCE(window);但我加入会报错,不知什么原因?
也尝试过将图标拷贝到DEBUG目录下,也不行。
我的开发环境是QT5.0.1


离线wj025
只看该作者 1楼 发表于: 2013-04-04
离线wj025
只看该作者 2楼 发表于: 2013-04-04
离线wj025
只看该作者 3楼 发表于: 2013-04-04
上面一张是设计界面
后一张是运行界面
离线jdwx

只看该作者 4楼 发表于: 2013-04-04
回 3楼(wj025) 的帖子
如果可以就整个程序打包发上来。
写个简单的例子(能重现问题的例子)发上来也可。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线rpdhunter

只看该作者 5楼 发表于: 2013-04-04
楼主的图标文件有没有加入资源文件(.qrc)中?如果直接从硬盘导入的话,是不行的
离线jdwx

只看该作者 6楼 发表于: 2013-04-04
回 3楼(wj025) 的帖子
原文:http://www.360doc.com/content/12/0427/11/6828497_206883958.shtml


1、QT creator 中File--new-QT resource file,就会在工程中添加一个资源文件,然后单击Add下拉框,选择Add prefix,可以将生成的/new/prefix的后缀改为其他的名字,如file。然后在单击Add下拉框,选择Add files,将需要的图标文件添加过来,然后保存即可。

2、添加好资源文件后,在ui中Action Editor双击,弹出的Icon中添加即可。
     如果菜单图标添加成功,就可以在Action Editor中把这个图标拖动到工具栏,然后给它添加响应
     如:connect(ui->action_LgDlgMenu,SIGNAL(triggered()),ui->LgDlgMenu,SLOT(trigger()));工具栏的菜单图标和菜单栏的菜单项可以实现同样的功能。

3、添加好资源文件后,在窗口和对话框相应的.cpp文件中调用setWindowIcon()即可。如:
    setWindowIcon(QIcon(":/new/prefixIcon/recourses/loginDlg.png"));
    这里的关键是QIcon的资源文件路径的设置要正确,否则图标无法显示。

4、工具栏中添加菜单的快捷方式:
    这里涉及到一个QAction的类,然后向工具栏添加QAction的对象。要使单击工具栏上菜单的图标实现和菜单一样的功能,需要把QAction对象的信号与菜单的槽连接起来。如:
QAction *pLoginAction = new QAction(QIcon    (":/new/prefixTitle/recourses/title.png"),tr("&LoginDlg"),this);[喝小酒的网摘]http://blog.const.net.cn/a/5411.htm
    pLoginAction->setShortcut(QKeySequence(tr("Ctrl+L")));
    pLoginAction->setStatusTip(tr("Pop up a dialog"));
   QObject::connect(pLoginAction,SIGNAL(triggered()),ui->LoginDlgMenu,SLOT(trigger()));
    ui->mainToolBar->addAction(pLoginAction);
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线roywillow

只看该作者 7楼 发表于: 2013-04-04
Q_INIT_RESOURCE这个好像只是在你把资源文件单独编译成独立的二进制包的情况下,才用得到
qrc不止可以将资源嵌入app,还可以将资源单独编译成二进制文件,供其他程序使用
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线wj025
只看该作者 8楼 发表于: 2013-04-04
资源文件是按照要求建好的,并将图标文件都加入了。
自己看不出哪里出了问题?
还望朋友们帮我看看
下面是工程源码
源码 window.rar (15 K) 下载次数:3
离线jdwx

只看该作者 9楼 发表于: 2013-04-04
回 8楼(wj025) 的帖子
只要把mainwindow里下面的代码删除:
    QIcon icon;
    icon.addFile("new.png");
    qDebug() << "iconisnull = " << icon.isNull();
    QList<QAction *> list = ui->mainToolBar->actions();
    foreach(QAction *act,list)
    {
        act->setIcon(icon);
        qDebug() << act->objectName();
    }
因为你已经在UI编辑器里为action设置好了图标,就不用再去写代码了。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线XChinux

只看该作者 10楼 发表于: 2013-04-04
那基本就是路径问题了。请确保你designer中所指定的图标文件路径与运行时的一致。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线wj025
只看该作者 11楼 发表于: 2013-04-04
回 9楼(jdwx) 的帖子
这是我因为图标不显示,加的测试代码,但加了这些代码也没图标显示。
你运行下我这DEMO看,有图标显示嘛?
离线wj025
只看该作者 12楼 发表于: 2013-04-04
回 10楼(XChinux) 的帖子
我将图标文件夹整个拷贝到运行目录,也没图标显示。
离线jdwx

只看该作者 13楼 发表于: 2013-04-04
回 11楼(wj025) 的帖子
图一:没有去掉那部分代码,没图标。
图二:去掉代码,有图标。
自己试试不就知道了。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线wj025
只看该作者 14楼 发表于: 2013-04-04
回 13楼(jdwx) 的帖子
其实我早就试过了,现在又试了下,不是没图标。
是不是你的开发环境和我不一样?我的是QT5.0.1,WINDOWS XP
离线wj025
只看该作者 15楼 发表于: 2013-04-04
还是没图标啊!
离线jdwx

只看该作者 16楼 发表于: 2013-04-04
回 15楼(wj025) 的帖子
清理编译出来的文件,如果用影子编译直接删除目录,再编译。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线wj025
只看该作者 17楼 发表于: 2013-04-04
回 16楼(jdwx) 的帖子
把DEBUG目录删除,重新编译,可以了。
一直用QT中构建-》清理项目,以为会清理好的,原来并不会啊!
QT的编译选项有哪些还要注意下才行啊
谢谢JDWX的帮助!
快速回复
限100 字节
 
上一个 下一个