kingofzgjsxz 发表于 2017-5-28 21:44:33

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]
查看完整版本: Qt Creator快速入门第三版 P93,94,95页,完整源代码