- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想用 QPushButton 和 QMenu 构建一个下拉列表控件,如下所示:
QPushButton* menuBt = new QPushButton("Please select");
menuBt->setFlat(true);
QMenu* menu = new QMenu();
menuBt->setMenu(menu);
QWidgetAction* wa1 = new QWidgetAction(menu);
QLabel* l1 = new QLabel("Option1");
wa1->setDefaultWidget(l1);
menu->addAction(wa1);
QWidgetAction* wa2 = new QWidgetAction(menu);
QLabel* l2 = new QLabel("Option2");
wa2->setDefaultWidget(l2);
menu->addAction(wa2);
menu->setStyleSheet("QMenu::item {font-family: \"Arial\"; font-size: 13pt; color: #808080; border: 1px solid gray; background-color: rgb(234,234,234);}"
"QMenu::item:hover {background-color: rgb(0, 0, 255);}");
menuBt->setStyleSheet("QPushButton {font-family: \"Arial\"; font-size: 13pt; color: #808080; border: 1px solid gray;padding: 1px 18px 1px 3px;min-width: 6em; background-color: rgb(234,234,234);}");
我通过 setStyleSheet 为菜单项设置了字体和悬停背景颜色,但似乎不起作用。如何使字体和悬停背景颜色适用于菜单项?
回答:
class QTDropDownButton : public QPushButton
{
Q_OBJECT
public:
QTDropDownButton(QString text, QWidget *parent = nullptr);
void addItem(QString text);
protected slots:
void menuAboutToShow();
private:
QMenu* menu_;
};
QTDropDownButton::QTDropDownButton(QString text, QWidget *parent) :
QPushButton(text, parent)
{
setFlat(true);
menu_ = new QMenu();
setMenu(menu_);
connect(menu_, SIGNAL(aboutToShow()), this, SLOT(menuAboutToShow()));
setStyleSheet("font-family: Arial; font-size: 13pt; color: #808080; border: 1px solid gray; background-color: rgb(234,234,234);");
menu_->setStyleSheet("QMenu::item {font-family: Arial; font-size: 13pt; color: #808080; border: 1px solid gray; background-color: rgb(234,234,234);}"
"QMenu::item:selected {background-color: rgb(0, 255, 255);}"
"QLabel {font-family: Arial; font-size: 13pt;}"
"QLabel:hover {background-color: rgb(0, 0, 255);}");
}
void QTDropDownButton::addItem(QString text)
{
if(!menu_)
return;
QWidgetAction* wa1 = new QWidgetAction(menu_);
QLabel* l1 = new QLabel(text);
wa1->setDefaultWidget(l1);
menu_->addAction(wa1);
}
void QTDropDownButton::menuAboutToShow()
{
if(menu_)
menu_->setFixedWidth(this->width());
}
最佳答案
要设置字体系列,您不需要在 Arial 周围加上引号。我相信这会阻止您的样式表正确解析。
旁注:目前只有您的 menuBt 有样式,其他按钮看起来像默认按钮。要更改菜单中所有按钮的按钮样式,请将样式移动到菜单的 setStylesheet()
调用中,如下所示:
menu->setStyleSheet("QMenu::item {font-family: Arial; font-size: 13pt; color: #808080; border: 1px solid gray; background-color: rgb(234,234,234);}" +
"QMenu::item:hover {background-color: rgb(0, 0, 255);}" +
"QPushButton {font-family: Arial; font-size: 13pt; color: #808080; border: 1px solid gray;padding: 1px 18px 1px 3px;min-width: 6em; background-color: rgb(234,234,234);}");
但是如果你只想让这一个按钮看起来不同,调用是正确的setStylesheet()
就可以了,但是你可以省略选择器,像这样:
menuBt->setStyleSheet("font-family: Arial; font-size: 13pt; color: #808080; border: 1px solid gray;padding: 1px 18px 1px 3px;min-width: 6em; background-color: rgb(234,234,234);");
关于c++ - QMenu:如何自定义QMenu的菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31399610/
大家好 我有一些代码根据一些数据生成动态填充的 QMenu(我将其称为 thisMenu)。创建 QMenu thisMenu,将一些“主”QWidget 作为父级,并添加到此 QWidget 中的
我在应用程序中的 MainWindow 之上构建了一个 QMenu MainMenu 。由于每个人都习惯了,我有以下 QMenu 主菜单: File - Edit - SuperHeavyExpert
如果没有其他原因,只是为了我自己的消遣,我想写一个全局插入运算符,这样我就可以使用花哨的代码了: aQMenu addAction(action); return menu; } 编译
Reading the Qt5 source code ,我注意到 QLabel::contextMenuEvent() 使用这种(非阻塞)样式: QMenu *menu = ... menu->se
Reading the Qt5 source code ,我注意到 QLabel::contextMenuEvent() 使用这种(非阻塞)样式: QMenu *menu = ... menu->se
使用 Qt5,假设我有一个实现其自己的上下文菜单的控件。并假设在某些情况下我想将一些项目添加到标准上下文菜单。因此,为此,我创建了一个临时 QMenu,向其中添加一些内容并附加标准菜单。像这样的东西:
代码示例: auto fileMenu = std::make_unique(this->menuBar()->addMenu("First")); fileMenu->addAction("AFir
我正在使用 QT4 并动态地向 QMenu 添加条目。是否可以对 QMenu 中的条目进行排序而不删除它并创建一个新条目? 我原本以为有一个函数可以在特定位置插入,因此我可以在插入时进行排序,但我一直
我使用 Windows,我想将样式表设置为 QMenu 以赋予其半透明背景。为了让它起作用,我首先设置 FramelessWindowHint,然后设置 WA_TranslucentBackgroun
我的情况非常具体。我想将 QAction 放入 QToolbar 并达到以下行为: 可检查带有图标的QAction。 右侧的经典箭头,用于显示菜单 通过按此箭头,我的 QDialog 应该出现在屏幕上
我有一个带有半透明背景和圆角边缘(边框半径)的 QMenu。不幸的是,Windows 7 为该菜单绘制了阴影,该阴影不适合圆角边缘。它是为普通矩形菜单绘制的阴影。 有没有 - 一种完全禁用 QMenu
我希望主窗口中有一个菜单栏,并且能够从其他类设置菜单栏中的菜单。使用 setMenuWidget 命令将覆盖第一个菜单选项,如代码所示。在我设置菜单的类中,我想我可能需要只设置一个菜单而不是菜单栏,然
我正在使用一个执行一些方法的自定义 QMenu。该菜单具有三个选项:删除行选项、切换变量选项和调试选项(打印切换变量的值)。代码未正确执行。有时调试按钮不起作用,它会突然被执行多次。切换选项需要单击两
我正在玩弄提到的 Qt 演示浏览器示例 here并在我尝试对书签处理代码进行微小更改时注意到异常情况。 我的目的是让工具栏中的书签在新选项卡而不是现有选项卡中打开。它非常适合直接位于书签选项卡上的书签
我有几个struct,带有enum和std::string,我用来填充QComboBox使用 for() 循环与他们一起使用。像这样: struct Struct { enum Enum
QMenu 显示在 QLineEdit 右键单击上。问题:如何修改此代码以在单击鼠标左键时也显示菜单? from PyQt4.QtCore import * from PyQt4.QtGui im
是否有信号/事件可用于 QMenu 撕下? 我有一个 QMenu 子类,其中有 .setTearOffEnabled(True),但如果用户点击可撕下的“栏”。 我无法使用 QtCore.Qt.Win
我有一个弹出式 QMenu 在 QListView 中显示很 multimap 标: QMenu*menu=createMenu(); QListView*list=createList(); QWi
我正在尝试构建一个菜单,其中包含一些在 QT 中不可交互的项目。我在我的 MyCustomMenuClass 中继承了 QMenu。我正在尝试将部分标题添加到我的菜单中,以便用户更清楚。 例如,它应该
我想用 QPushButton 和 QMenu 构建一个下拉列表控件,如下所示: QPushButton* menuBt = new QPushButton("Please select"); men
我是一名优秀的程序员,十分优秀!