【发布时间】:2019-11-29 07:38:16
【问题描述】:
我将 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 设置的边框图像像 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 就像您在此处显示的那样,但您正在覆盖您之前可能在其上设置的任何 CSS。您需要获取现有的 CSS,然后将其
.append(),然后在按钮上设置结果。 -
"如何将下拉菜单的宽度设置为与 QPushButton 一样宽?"有点像一个单独的问题,但让我问一下,按钮是设置为固定宽度,还是会随着可用的布局大小而变化? (提示:固定宽度会更简单:)
-
抱歉,我没有就我的问题提供足够的信息。我已将图像和所有代码添加到我的问题中。 QPushButton的border-image QSS在UI设计器中设置,其他通过mainwindow.cpp中的代码设置。
-
我希望子菜单的宽度始终与 QPushButton 的宽度相同。与图 3 中的按钮较长不同,子菜单的长度仍与之前相同。
-
我希望子菜单的宽度始终与 QPushButton 的宽度相同。与图 3 中的按钮较长不同,子菜单的长度仍与之前相同。
标签: qt qtstylesheets