qt - 如何删除下拉菜单的下拉箭头,同时保留QSS的border-image?

标签 qt qtstylesheets

我将 QPushButton 更改为下拉菜单。我的代码如下:

m_menu = new QMenu(this);
        m_addAction = new QAction(m_menu);
        m_delAction = new QAction(m_menu);
        m_addAction->setText(QObject::tr("add"));
        m_delAction->setText(QObject::tr("del"));
        m_menu->addAction(m_addAction);
        m_menu->addAction(m_delAction);
 m_menu->setStyleSheet("\
                       QMenu {\
                       background-image: url(:/img/tanchu-1.png);; /*background-image*/\
                       border: 3px solid rgb(235,110,36);/*menu border*/\
                       }\
                       QMenu::item {\
                       font-size: 10pt; \
                       color: rgb(225,225,225);\
                       border: 3px solid rgb(60,60,60);\
                       background-image: url(:/img/tanchu-1.png);\
                       padding:160px 160px;\
                       margin:2px 2px;\
                       }\
                       QMenu::item:selected { \
                       background-color:rgb(235,110,36);\
                       }\
                       QMenu::item:pressed {\
                       border: 1px solid rgb(60,60,61); \
                       background-color: rgb(220,80,6); \
                       }\
                       ");
ui->pushButton->setMenu(m_menu);

我得到的按钮看起来像这样 image1 .右下角有一个黑色的下拉箭头。

但现在的问题是,当我使用

从下拉菜单中删除下拉箭头时
ui->pushButton->setStyleSheet("QPushButton::menu-indicator{image:none;}");

我用 QSS border-image: url(:/img/btn_mid_0.png);设置给 QPushButton 的 border-image 像 image2 image 2 一样消失了.下拉箭头和边框图像一起消失。如何在保持之前设置的边框图像的同时删除下拉箭头? 此外,子菜单的宽度不会随着 image3 image3 的 qpushbutton 而改变。 .如何将下拉菜单的宽度设置为与 QPushButton 一样宽? 谢谢!

我所有的代码如下: 主窗口.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:

private:
    Ui::MainWindow *ui;
    QMenu *m_menu;
    QAction *m_addAction;
    QAction *m_delAction;
    QPushButton *m_pushButton;

    void addFunc();
    void delFunc();
};

#endif // MAINWINDOW_H

主窗口.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QMenu>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_menu = new QMenu(this);
        m_addAction = new QAction(m_menu);
        m_delAction = new QAction(m_menu);
        m_addAction->setText(QObject::tr("add"));
        m_delAction->setText(QObject::tr("del"));
        m_menu->addAction(m_addAction);
        m_menu->addAction(m_delAction);
        connect(m_addAction, &QAction::triggered, this, &MainWindow::addFunc);
        connect(m_delAction, &QAction::triggered, this, &MainWindow::delFunc);

 m_menu->setStyleSheet("\
                       QMenu {\
                       background-image: url(:/img/tanchu-1.png);; /*background-image*/\
                       border: 3px solid rgb(235,110,36);/*menu border*/\
                       }\
                       QMenu::item {\
                       font-size: 10pt; \
                       color: rgb(225,225,225);\
                       border: 3px solid rgb(60,60,60);\
                       background-image: url(:/img/tanchu-1.png);\
                       padding:160px 160px;\
                       margin:2px 2px;\
                       }\
                       QMenu::item:selected { \
                       background-color:rgb(235,110,36);\
                       }\
                       QMenu::item:pressed {\
                       border: 1px solid rgb(60,60,61); \
                       background-color: rgb(220,80,6); \
                       }\
                       ");
  ui->pushButton->setMenu(m_menu);

  ui->pushButton->setStyleSheet("QPushButton::menu-indicator{image:none;}");

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::addFunc()
{
    qDebug() << "addFunc";
}

void MainWindow::delFunc()
{
    qDebug() << "delFunc";
}

最佳答案

只需在一个地方设置所有按钮 CSS,可以在 QtCreator/Designer 属性中,在 C++ 代码中,不能同时设置。基本上,您的 C++ CSS 会覆盖您在设计器 View 中设置的内容。

在 Designer View 中,只需为 styleSheet 属性使用类似这样的内容:

QPushButton { border-image: url(:/img/btn_mid_0.png); }
QPushButton::menu-indicator { image: none; }

或者在 C++ 中同样的东西,但是有引号 :)

至于菜单样式...我不确定现在发生了什么(看起来很奇怪!)但是让它们的大小匹配的最简单方法是在 CSS 中显式设置两者的大小(width: XXXpx;) 或 C++ (QWidget::setFixedWidth(XXX))。如果按钮由布局管理,C++ 版本可能会更好,因为 CSS 大小属性会变得模糊。对于 CSS,有时 min-width 和/或 max-widthwidth 效果更好。

关于qt - 如何删除下拉菜单的下拉箭头,同时保留QSS的border-image?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59100590/

相关文章:

c++ - Qt StyleSheet 以编程方式创建QWidget

Qt 样式表文本对齐

c++ - 水平和垂直居中 QTextEdit 的文本

qt - 如何去掉QScrollbar滚动按钮?

c++ - 使用 QSGImageNode 渲染非平滑 QImage 的一部分

c++ - QT:QSharedMemory 正在使用相同的键创建多个段

qt - Qt Creator 的项目文件中是否有特殊的外部文件类别?

c++ - 非中止断言 CppUnit

c++ - QToolBar 改变高度

c++ - QMetaEnum 和强类型枚举