我将 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);
但现在的问题是,当我使用
从下拉菜单中删除下拉箭头时ui->pushButton->setStyleSheet("QPushButton::menu-indicator{image:none;}");
我用 QSS border-image: url(:/img/btn_mid_0.png);
设置给 QPushButton 的 border-image 像 image2 一样消失了.下拉箭头和边框图像一起消失。如何在保持之前设置的边框图像的同时删除下拉箭头?
此外,子菜单的宽度不会随着 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-width
比 width
效果更好。
关于qt - 如何删除下拉菜单的下拉箭头,同时保留QSS的border-image?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59100590/