QT 代码布局,控件添加下拉菜单

QT 代码布局,控件添加下拉菜单

最终实现:
在这里插入图片描述
.h文件:

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QToolButton>
#include <QMenu>
#include <QVBoxLayout>	//垂直布局
#include <QHBoxLayout>	//水平布局
#include <QGridLayout>	//栅格布局
class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = 0);
    ~MyWidget();
    void init();
public slots:
    void doPrint();
private:

};

#endif // MYWIDGET_H

.cpp文件:

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{

    this->resize(600,480);
    QGridLayout *grid = new QGridLayout(this);
    grid->setSpacing(6);
    grid->setContentsMargins(11, 11, 11, 11);
    QVBoxLayout *vboxLayout = new QVBoxLayout;
    QVBoxLayout *vboxLayout2 = new QVBoxLayout;
    QLineEdit *name = new QLineEdit;
    name->setText("name");
    name->setAlignment(Qt::AlignHCenter);
    QLineEdit *password = new QLineEdit;
    password->setText("password");
    password->setEchoMode(QLineEdit::Password);
    password->setAlignment(Qt::AlignHCenter);
    //为Tool控件添加下拉菜单
    QToolButton *toolButton = new QToolButton;
    QMenu *menu = new QMenu();
    menu->addAction("aaa",this,SLOT(doPrint()));
    menu->addAction("bbb",this,SLOT(doPrint()));
    menu->addAction("ccc",this,SLOT(doPrint()));
    toolButton->setMinimumSize(QSize(100,50));
    toolButton->setMenu(menu);
    toolButton->setPopupMode(QToolButton::InstantPopup);
    vboxLayout->addWidget(toolButton);

    vboxLayout->addWidget(name);
    vboxLayout->addWidget(password);
    vboxLayout2->addLayout(vboxLayout);

    QHBoxLayout *hboxLayout = new QHBoxLayout;
    QPushButton *yesButton = new QPushButton;
    QPushButton *noButton = new QPushButton;
    yesButton->setText("yes");
    noButton->setText("no");
    hboxLayout->addWidget(yesButton);
    hboxLayout->addWidget(noButton);
    vboxLayout->addLayout(hboxLayout);
    grid->addLayout(vboxLayout2,0,0,1,1);

}

MyWidget::~MyWidget()
{

}

void MyWidget::doPrint()
{
     QAction *action = (QAction *)this->sender();
    if(action->text()=="aaa")
        qDebug()<<"aaa";
    if(action->text()=="bbb")
        qDebug()<<"bbb";
    if(action->text()=="ccc")
        qDebug()<<"ccc";
}

在 PySide6 中,QCheckBox 控件本身不支持下拉菜单,但可以通过在 QCheckBox 控件旁边添加一个 QPushButton 控件,并在 QPushButton 控件添加下拉菜单来实现类似功能。具体步骤如下: 1. 创建一个 QCheckBox 控件和一个 QPushButton 控件,并将它们放在同一个布局中。 ```python checkbox = QtWidgets.QCheckBox("Checkbox") button = QtWidgets.QPushButton("Dropdown") layout = QtWidgets.QHBoxLayout() layout.addWidget(checkbox) layout.addWidget(button) ``` 2. 创建一个 QMenu 控件,并在其中添加需要的 QAction 控件。 ```python menu = QtWidgets.QMenu() action1 = menu.addAction("Action 1") action2 = menu.addAction("Action 2") ``` 3. 将 QPushButton 控件的 clicked 信号连接到一个槽函数中,在槽函数中显示 QMenu 控件。 ```python def show_menu(): menu.exec_(button.mapToGlobal(QtCore.QPoint(0, button.height()))) button.clicked.connect(show_menu) ``` 4. 当用户选择 QMenu 中的一个 QAction 控件时,更新 QCheckBox 控件的文本。 ```python def set_checkbox_text(action): checkbox.setText(action.text()) action1.triggered.connect(set_checkbox_text) action2.triggered.connect(set_checkbox_text) ``` 完整示例代码如下: ```python from PySide6 import QtCore, QtWidgets class MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.init_ui() def init_ui(self): checkbox = QtWidgets.QCheckBox("Checkbox") button = QtWidgets.QPushButton("Dropdown") layout = QtWidgets.QHBoxLayout() layout.addWidget(checkbox) layout.addWidget(button) menu = QtWidgets.QMenu() action1 = menu.addAction("Action 1") action2 = menu.addAction("Action 2") def show_menu(): menu.exec_(button.mapToGlobal(QtCore.QPoint(0, button.height()))) button.clicked.connect(show_menu) def set_checkbox_text(action): checkbox.setText(action.text()) action1.triggered.connect(set_checkbox_text) action2.triggered.connect(set_checkbox_text) central_widget = QtWidgets.QWidget() central_widget.setLayout(layout) self.setCentralWidget(central_widget) if __name__ == "__main__": app = QtWidgets.QApplication([]) window = MainWindow() window.show() app.exec_() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值