QWidgetAction

QWidgetAction介绍:

大多数action用作菜单中条目,或者状态栏中按钮。很多情况,我们需要一些复杂Qt部件,例如具有缩放功能的按钮(Qtoolbar中QcomboBox表示不同的缩放等级),QToolBar中提供了InsertWidget函数,提供用户自定义的部件。
如果你想要在容器中实现一些通用定制可视化的部件,你需要继承QWidget部件。
如果在QToobBar添加了QWidgetAction,就会调用QWidgetAction::createWidget(),重载该函数,构建一个包含父属性(parent)通用新部件。
如果一个action从容器中移除,那么QWidgetAction::deleteWidget()就会已先前的构建的通用部件作为参数。默认重载函数隐藏了部件,且通过使用QObject::deleteLater删除它。
如果你设计一个部件,你可以通过setDefaultWidget()来设置为默认组件。添加到QToolBar或者支持QWidgetAction的action容器中的action,能够被使用起来。
注意:

createWidget说明:

如果action添加到一个部件容器,这个createWidget就会被调用。如果不希望自定义的小部件在指定父部件展示,则应返回0。

class MyAction:public QWidgetAction
{
 Q_OBJECT
public:
    MyAction(QWidget *parent);
    QWidget *createWidget(QWidget *parent);
    QLineEdit * lineedit;
signals:
    void changetext(QString content);

public slots:
    void onchangtext();

};

```cpp
#include "myaction.h"
#include <QMenu>
//#include <QMenuBar>
#include <QAction>
#include <QLineEdit>
#include <QLabel>
#include <QHBoxLayout>

MyAction::MyAction(QWidget *parent):QWidgetAction(parent)
{


}
QWidget *MyAction::createWidget(QWidget *parent)
{
    QHBoxLayout* vbox = new QHBoxLayout();
    lineedit = new QLineEdit();
    QLabel * tip = new QLabel();
    tip->setText(tr("请输入内容:"));
    tip->resize(40,40);
    vbox->addWidget(tip);
    vbox->addWidget(lineedit);
    vbox->setGeometry(QRect(100,30,200,100));
    QWidget *centralWidget = new QWidget(parent); //QMainWindow 有一个中央窗体!所以你的布局必须得在它上面
    centralWidget->setLayout(vbox);
    connect(lineedit,SIGNAL(returnPressed()),this,SLOT(onchangtext()));
    return centralWidget;
}

void MyAction::onchangtext()
{
    QString content = lineedit->text();
    emit changetext(content);

}

setDefaultWidget说明

将部件设置为默认部件。所有权转移到QWidgetAction。除非子类重新实现createWidget()以返回新的部件,否则当容器部件通过requestWidget()获取部件时,将使用默认部件。
(不用实现createWidget()而实现自定义Action)
QMenu *menu3= menuBar()->addMenu(tr("菜单"));
QLabel *label = new QLabel();
label->setText("hello world");
QWidgetAction *action3 = new QWidgetAction(this);
action3->setDefaultWidget(label);
menu3->addAction(action3);

requestWidget说名

返回一个用来表现action的部件,带有指定parent。
支持actions的容器部件,在可视化的时候,会调用此函数。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值