首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt: QIcon在单击时消失;QIcon::模式不受尊重

Qt: QIcon在单击时消失;QIcon::模式不受尊重
EN

Stack Overflow用户
提问于 2017-04-01 06:43:41
回答 2查看 1K关注 0票数 0

我有一个播放按钮的png格式的映像,我在应用程序中存储为嵌入式资源

代码语言:javascript
复制
<!DOCTYPE RCC><RCC version="1.0">
  <qresource prefix="icon">
    <file>play.png</file>
  </qresource>
</RCC>

我已经为NormalActive模式创建了一个具有相同源映像集的Active

代码语言:javascript
复制
QIcon play;
play.addFile(":icon/play.png", QSize(), QIcon::Normal);
play.addFile(":icon/play.png", QSize(), QIcon::Active);

据我所知,这应该显示图标时,打开(Normal模式),并继续这样做时,单击(Active模式)。

QIcon::Normal:当用户没有与图标交互时显示像素映射,但是图标所表示的功能是可用的。 QIcon::Active:当图标所表示的功能可用时,当用户正在与图标交互时,显示像素地图,例如,移动鼠标或单击它。

但是,当我单击它时,它就消失了(取而代之的是一个空白框)。

下面是未单击的图标

这是点击的图标

最小工作示例:

我创建了一个复制我所看到的行为的最小示例。

代码语言:javascript
复制
#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>

void initIcons()
{
    Q_INIT_RESOURCE(view);
}

int main(int argc, char** argv)
{
    QApplication* app = new QApplication(argc, argv);
    QMainWindow*  window = new QMainWindow();

    QMenuBar* menu = new QMenuBar();
    window->setMenuBar(menu);

    QIcon play;
    play.addFile(":icon/play.png", QSize(), QIcon::Normal);
    play.addFile(":icon/play.png", QSize(), QIcon::Active);

    QAction* action = new QAction(play, "", nullptr);
    menu->addAction(action);

    window->show();
    return app->exec();
}

更新:

我还尝试了ModeState的每一种组合,但行为并没有改变:

代码语言:javascript
复制
play.addFile(":icon/play.png", QSize(), QIcon::Normal,   QIcon::On);
play.addFile(":icon/play.png", QSize(), QIcon::Normal,   QIcon::Off);
play.addFile(":icon/play.png", QSize(), QIcon::Selected, QIcon::On);
play.addFile(":icon/play.png", QSize(), QIcon::Selected, QIcon::Off);
play.addFile(":icon/play.png", QSize(), QIcon::Active,   QIcon::On);
play.addFile(":icon/play.png", QSize(), QIcon::Active,   QIcon::Off);

我也试过addPixmap

代码语言:javascript
复制
QIcon play;
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Normal,   QIcon::On);
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Normal,   QIcon::Off);
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Selected, QIcon::On);
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Selected, QIcon::Off);
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Active,   QIcon::On);
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Active,   QIcon::Off);

不幸的是,所有这些都没有改变行为。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-03 06:34:11

正如我在QMenuBar风格中所理解的那样,我以这样的方式修改了您的示例:

代码语言:javascript
复制
#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>


int main(int argc, char** argv)
{
    QApplication* app = new QApplication(argc, argv);
    QMainWindow*  window = new QMainWindow();

    QMenuBar* menu = new QMenuBar();
    menu->setStyleSheet(R"style(
QMenuBar {
   background-color: transparent;
}
QMenuBar::item:selected { /* when selected using mouse or keyboard */
  background: #a8a8a8;
}

QMenuBar::item:pressed {
  background: #888888;
}
)style");
    window->setMenuBar(menu);

    QIcon play;
    const char path_to_icon[] = "/home/evgeniy/Downloads/icon-play-128.png";
    play.addFile(path_to_icon, QSize(), QIcon::Normal);
    play.addFile(path_to_icon, QSize(), QIcon::Active);

    QAction* action = new QAction(play, "", nullptr);
    menu->addAction(action);

    window->show();
    return app->exec();
}

新闻发布后我可以看到图标。请注意,我的默认样式与您的不同,因此您可能需要修改样式表中的颜色。

票数 1
EN

Stack Overflow用户

发布于 2017-04-02 02:43:40

也许您可以在插槽中添加图标:

代码语言:javascript
复制
connect({your_action_name},&QAction::toggled,[=](){
your_action_name.setIcon("icon_path_file.ico");
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43153706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档