找回密码
 立即注册
收起左侧

Qt Creator快速入门第三版 P93,94,95页,完整源代码

0
回复
6577
查看
[复制链接]
累计签到:9 天
连续签到:1 天
来源: 原创 2017-5-28 21:44:33 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
介于书上提供的源代码的不完整性,在这里提供完整代码供大家参考
一定要记得先在.ui文件中建立一个TextEdit部件。

代码如下(参考论坛上提供的源代码)

mainwindow.h:
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H

  3. #include <QMainWindow>

  4. namespace Ui {
  5.     class MainWindow;
  6. }

  7. class MainWindow : public QMainWindow
  8. {
  9.     Q_OBJECT

  10. public:
  11.     explicit MainWindow(QWidget *parent = 0);
  12.     ~MainWindow();

  13. private:
  14.     Ui::MainWindow *ui;
  15. private slots:
  16.     void setText(const QString &string); //向编辑器中添加文本
  17. };

  18. #endif // MAINWINDOW_H
复制代码
myaction.h:
  1. #ifndef MYACTION_H
  2. #define MYACTION_H

  3. #include <QWidgetAction>
  4. class QLineEdit; //前置声明
  5. class MyAction : public QWidgetAction
  6. {
  7.     Q_OBJECT
  8. public:
  9.     explicit MyAction(QObject *parent = 0);
  10. protected:
  11.     QWidget* createWidget(QWidget *parent);
  12.     //声明函数,该函数是QWidgetAction类中的虚函数

  13. signals:
  14.     void getText(const QString &string);
  15.     //新建信号,用于在按下回车键时,将行编辑器中的内容发射出去
  16. private slots:
  17.     void sendText(); //新建槽,它用来与行编辑器的按下回车键信号关联
  18. private:
  19.     QLineEdit *lineEdit; //定义行编辑器对象的指针

  20. };

  21. #endif // MYACTION_H
复制代码
main.cpp:
  1. #include "mainwindow.h"
  2. #include <QTextCodec>
  3. #include <QApplication>

  4. int main(int argc, char *argv[])
  5. {
  6.     QApplication a(argc, argv);

  7.     MainWindow w;
  8.     w.show();

  9.     return a.exec();
  10. }
复制代码
mainwindow.cpp:
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "myaction.h"
  4. MainWindow::MainWindow(QWidget *parent) :
  5.     QMainWindow(parent),
  6.     ui(new Ui::MainWindow)
  7. {
  8.     ui->setupUi(this);

  9.     // 创建MyAction
  10.     MyAction *action = new MyAction;
  11.     QMenu *editMenu = ui->menuBar->addMenu(tr("编辑(&E)"));

  12.     // 添加菜单并且加入我们的action
  13.     editMenu->addAction(action);

  14.     // 将action的getText()信号和这里的setText()槽进行关联
  15.     connect(action,SIGNAL(getText(QString)),this,SLOT(setText(QString)));

  16. }

  17. MainWindow::~MainWindow()
  18. {
  19.     delete ui;
  20. }


  21. // 插入文本
  22. void MainWindow::setText(const QString &string)
  23. {
  24.     // 将获取的文本添加到编辑器中
  25.     ui->textEdit->setText(string);
  26. }


复制代码
myaction.cpp:
  1. #include <QLineEdit>
  2. #include <QSplitter>
  3. #include <QLabel>
  4. #include "myaction.h"

  5. MyAction::MyAction(QObject *parent) :
  6.     QWidgetAction(parent)
  7. {
  8.     // 创建行编辑器
  9.     lineEdit = new QLineEdit;

  10.     // 将行编辑器的按下回车键信号与我们的发送文本槽关联
  11.     connect(lineEdit,SIGNAL(returnPressed()),this,SLOT(sendText()));
  12. }

  13. // 创建部件
  14. QWidget * MyAction::createWidget(QWidget *parent)
  15. {
  16. // 这里使用inherits()函数判断父部件是否是菜单或者工具栏
  17. // 如果是,则创建该父部件的子部件,并且返回子部件
  18. // 如果不是,则直接返回0
  19.     if(parent->inherits("QMenu") || parent->inherits("QToolBar")){
  20.         QSplitter *splitter = new QSplitter(parent);
  21.         QLabel *label = new QLabel;
  22.         label->setText(tr("插入文本:"));
  23.         splitter->addWidget(label);
  24.         splitter->addWidget(lineEdit);
  25.         return splitter;
  26.     }
  27.     return 0;
  28. }

  29. // 发送文本
  30. void MyAction::sendText()
  31. {
  32.     // 发射信号,将行编辑器中的内容发射出去
  33.     emit getText(lineEdit->text());

  34.     // 清空行编辑器中的内容
  35.     lineEdit->clear();
  36. }

复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了