我有一个播放按钮的png格式的映像,我在应用程序中存储为嵌入式资源。
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="icon">
<file>play.png</file>
</qresource>
</RCC>我已经为Normal和Active模式创建了一个具有相同源映像集的Active
QIcon play;
play.addFile(":icon/play.png", QSize(), QIcon::Normal);
play.addFile(":icon/play.png", QSize(), QIcon::Active);据我所知,这应该显示图标时,打开(Normal模式),并继续这样做时,单击(Active模式)。
QIcon::Normal:当用户没有与图标交互时显示像素映射,但是图标所表示的功能是可用的。QIcon::Active:当图标所表示的功能可用时,当用户正在与图标交互时,显示像素地图,例如,移动鼠标或单击它。
但是,当我单击它时,它就消失了(取而代之的是一个空白框)。
下面是未单击的图标

这是点击的图标

最小工作示例:
我创建了一个复制我所看到的行为的最小示例。
#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();
}更新:
我还尝试了Mode和State的每一种组合,但行为并没有改变:
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
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);不幸的是,所有这些都没有改变行为。
发布于 2017-04-03 06:34:11
正如我在QMenuBar风格中所理解的那样,我以这样的方式修改了您的示例:
#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();
}新闻发布后我可以看到图标。请注意,我的默认样式与您的不同,因此您可能需要修改样式表中的颜色。
发布于 2017-04-02 02:43:40
也许您可以在插槽中添加图标:
connect({your_action_name},&QAction::toggled,[=](){
your_action_name.setIcon("icon_path_file.ico");
})https://stackoverflow.com/questions/43153706
复制相似问题