QT自定义菜单-行编辑框回车发送字符串信息到中心部件的文本编辑器
创建widgets Application
拖入textEdit控件,窗口空白,右键-布局-》栅格布局
构造函数里面添加代码:
#ifndef MAINWINDOW5_2_H
#define MAINWINDOW5_2_H
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow5_2; }
QT_END_NAMESPACE
class MainWindow5_2 : public QMainWindow
{
Q_OBJECT
public:
MainWindow5_2(QWidget *parent = nullptr);
~MainWindow5_2();
private:
Ui::MainWindow5_2 *ui;
private slots:
void setText(const QString &string2);
};
#endif // MAINWINDOW5_2_H
#include "mainwindow5_2.h"
#include "ui_mainwindow5_2.h"
#include "my_action.h"
MainWindow5_2::MainWindow5_2(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow5_2)
{
ui->setupUi(this);
//构造函数里面添加菜单
//添加菜单并加入My_Action
My_Action *myAction = new My_Action;
QMenu *edit_menu =ui->menubar->addMenu(tr("编辑(&E)"));
edit_menu->addAction(myAction);
//将myAction的getText()信号和这里的setText()槽进行关联
connect(myAction,SIGNAL(getText(QString)),this,SLOT(setText(QString)));
}
MainWindow5_2::~MainWindow5_2()
{
delete ui;
}
void MainWindow5_2::setText(const QString &string2)
{
ui->textEdit->setText(string2);
}
创建类文件:
#ifndef MY_ACTION_H
#define MY_ACTION_H
#include
#include
class QLineEdit;
class My_Action : public QWidgetAction
{
Q_OBJECT
public:
explicit My_Action(QObject *parent=0);
protected:
//声明函数,该函数是QWidgetAction类中的虚函数
QWidget * createWidget(QWidget *parent);
signals:
//新建信号,用于按下回车键后,将行编辑框中的内容发送出去
void getText(const QString &string);
private slots:
//新建槽,它用来与行编辑框的按下回车键信号进行关联,by txwtech
void sendText();
private:
//声明行编辑框对象的指针
QLineEdit * line_edit;
};
#endif // MY_ACTION_H
#include "my_action.h"
#include
#include //分裂器
#include
My_Action::My_Action(QObject *parent):QWidgetAction(parent)
{
//创建行编辑器
line_edit = new QLineEdit;
//将行编辑器的按下回车键信号与发送文本槽进行关联
connect(line_edit,&QLineEdit::returnPressed,this,&My_Action::sendText);
}
QWidget *My_Action::createWidget(QWidget *parent)
{
//这里使用inherits()函数判断父部件是否是菜单或者工具栏
//如果是,则创建该父部件的子部件,并且返回子部件
//如果不是,则直接返回0
if(parent->inherits("QMenu")||parent->inherits("QToolBar"))
{
QSplitter * q_splitter=new QSplitter(parent);
QLabel * q_label = new QLabel;
q_label->setText(tr("插入文本:"));
q_splitter->addWidget(q_label);
q_splitter->addWidget(line_edit);//部件添加的分裂器
return q_splitter;
}
return 0;
}
void My_Action::sendText()
{
emit getText(line_edit->text());
line_edit->clear();
}