Qt Creator快速入门第三版 P93,94,95页,完整源代码
介于书上提供的源代码的不完整性,在这里提供完整代码供大家参考一定要记得先在.ui文件中建立一个TextEdit部件。
代码如下(参考论坛上提供的源代码)
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
private slots:
void setText(const QString &string); //向编辑器中添加文本
};
#endif // MAINWINDOW_H
myaction.h:
#ifndef MYACTION_H
#define MYACTION_H
#include <QWidgetAction>
class QLineEdit; //前置声明
class MyAction : public QWidgetAction
{
Q_OBJECT
public:
explicit MyAction(QObject *parent = 0);
protected:
QWidget* createWidget(QWidget *parent);
//声明函数,该函数是QWidgetAction类中的虚函数
signals:
void getText(const QString &string);
//新建信号,用于在按下回车键时,将行编辑器中的内容发射出去
private slots:
void sendText(); //新建槽,它用来与行编辑器的按下回车键信号关联
private:
QLineEdit *lineEdit; //定义行编辑器对象的指针
};
#endif // MYACTION_H
main.cpp:
#include "mainwindow.h"
#include <QTextCodec>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "myaction.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 创建MyAction
MyAction *action = new MyAction;
QMenu *editMenu = ui->menuBar->addMenu(tr("编辑(&E)"));
// 添加菜单并且加入我们的action
editMenu->addAction(action);
// 将action的getText()信号和这里的setText()槽进行关联
connect(action,SIGNAL(getText(QString)),this,SLOT(setText(QString)));
}
MainWindow::~MainWindow()
{
delete ui;
}
// 插入文本
void MainWindow::setText(const QString &string)
{
// 将获取的文本添加到编辑器中
ui->textEdit->setText(string);
}
myaction.cpp:
#include <QLineEdit>
#include <QSplitter>
#include <QLabel>
#include "myaction.h"
MyAction::MyAction(QObject *parent) :
QWidgetAction(parent)
{
// 创建行编辑器
lineEdit = new QLineEdit;
// 将行编辑器的按下回车键信号与我们的发送文本槽关联
connect(lineEdit,SIGNAL(returnPressed()),this,SLOT(sendText()));
}
// 创建部件
QWidget * MyAction::createWidget(QWidget *parent)
{
// 这里使用inherits()函数判断父部件是否是菜单或者工具栏
// 如果是,则创建该父部件的子部件,并且返回子部件
// 如果不是,则直接返回0
if(parent->inherits("QMenu") || parent->inherits("QToolBar")){
QSplitter *splitter = new QSplitter(parent);
QLabel *label = new QLabel;
label->setText(tr("插入文本:"));
splitter->addWidget(label);
splitter->addWidget(lineEdit);
return splitter;
}
return 0;
}
// 发送文本
void MyAction::sendText()
{
// 发射信号,将行编辑器中的内容发射出去
emit getText(lineEdit->text());
// 清空行编辑器中的内容
lineEdit->clear();
}
页:
[1]