在linux环境用Qt实现文本编辑器和网络通信

在linux环境用Qt实现文本编辑器和网络通信
在linux环境用Qt实现文本编辑器和网络通信

Qt GUI程序设计

Qt GUI Programing Design

摘要

Qt是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。本文就是用Qt来实现文本编辑器和基于TCP协议的网络编程。其中文本编辑器可以实现新建文件,文件保存,文件另存为,打开,退出,复制,撤销,全选,粘贴,剪切,查找等功能有。另外还利用QtNetwork模块开发了一个Qt TCP的网络应用程序,实现了一个简单字符串的传输。在Qt中提供了QTcpSocket类来编写客户端程序,使用QTcpServer类编写服务器端程序。

本文首先分析了课题的背景,并对Qt,文本编辑器,基于TCP的Qt网络进行简要介绍。然后,给出了文本编辑器以及利用QtNetwork模块开发了一个Qt TCP的网络应用程序的原理和设计过程,并列出大量截图。最后,进行总结,并列出了自己在设计时遇到的问题。

关键词:Qt文本编辑器QTcpSocket TCP协议

目录

第1章绪论 (1)

1.1 课题研究的目的意义 (1)

1.2 Qt简介 (1)

1.3 文本编辑器 (2)

1.4 基于TCP的Qt网络 (3)

第2章文本编辑器的设计 (4)

2.1 记事本界面设计 (4)

2.2 记事本功能设计 (6)

2.2.1 新建文件,保存文件,和文件另存为 (6)

2.2.2实现打开,关闭,退出,撤销,复制,剪切,粘贴的功能 (9)

第3章 Qt TCP的网络应用程序设计 (13)

3.1 TCP socket 通信工作原理 (13)

3.2 设计过程 (13)

3.2.1 服务器端 (13)

3.2.2 客户端 (15)

3.2.3 结果 (17)

第4章总结 (19)

附录 (20)

附录A:文本编辑器代码 (20)

附录B:客户端代码 (27)

附录C:服务器端代码 (30)

第1章绪论

1.1 课题研究的目的意义

随着嵌入式产品的发展,往往要求嵌入式操作系统有网络和图形的功能。利用源代码开放的Linux搭建的嵌入式操作系统,由于强大的网络功能和低成本,近来得到了越来越多的应用。其能够提供全功能的桌面计算,定制非常方便并且支持大多数嵌入式系统上使用的芯片,包括Strong ARM,MIPS和Power PC等。在嵌入式Linux操作系统上使用一个功能完备的轻量级、高性能、高可靠、可配置的GUI系统成为可行的解决方案。

虽然市场上现在已经有了众多的优秀的GUI应用软件,但随着近年来计算机技术的迅速发展,当新硬件、新技术出现时,计算机的体系结构、指令系统和操作系统都可能发生相应的改变,这势必会导致一部分应用软件在新环境下无法正常运行。如果舍弃原有软件而重新开发,将会耗费大量的人力和资金,而且浪费了许多成熟的软件成果。

而Qt在源代码级上实现了跨平台特性,极大的支持了跨平台通用软件的开发。Qt可以用同一个源程序在不同平台上编译链接,生成目标代码,并取得相同的运行效果,称为“一次编写,随处编译”,利用这种方法充分实现了程序的跨平台运行。这种基于源代码的跨平台特性不仅解决了性能的问题,而且可以发挥各个平台的优势,充分利用每个平台自身的特点;并且即可以在新环境下实现原有软件的功能和特点,减少开发费用,还可以改进原有软件的不足,增加新的需求,从而提高软件的质量,延长软件生命期。

因此,利用Linux下基于Qt的嵌入式终端应用程序开发是一个非常有意义的课题,具有重要的研究和商业价值。

1.2 Qt简介

Qt是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。

Qt是一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。

自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE 的基础,KDE是所有主要的Linux发行版的一个标准组件。

Qt是诺基亚公司的一个产品。Qt 的良好封装机制使得Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt 提供了一种称为signals/slots 的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。

Qt 有丰富的API ,包括多达250 个以上的C++ 类,还提供基于模板的collections,serialization,file,I/O device,directory management,date/time 类。甚至还包括正则表达式的处理功能。

1.3 文本编辑器

文本编辑器可以将目录下的记事本文件以文件名列表的形式显示出来,并可以实现记事本文件的新建、打开、编辑和删除等功能;文本编辑器也可以实现文字的剪切,复制,粘贴,查找等功能,并可以通过软键盘对文本进行编辑等。

(1)文件列表功能:记事本的文件列表用于显示记事本文件名,并且当记事本文件名过长时进行文件名长度显示的控制。

(2)新建文件功能:新建记事本文件时,提示输入文件名,如果没有输入文件名而选择直接进入文件编辑界面,系统则提供默认的文件名用于存储文件。编辑新建文件时,文件名在编辑界面上方显示。

(3)文本编辑功能:编辑文件时,可以实现文字的剪切,复制,粘贴,查找等功能。保存文件后,文件名立即显示在文件列表上。

(4)打开文件功能:根据文件列表选择打开指定的文件,打开指定文件时,显示打开文件的文件内容在文件编辑界面上,文件内容过多时可以滚动显示,并在文件编辑界面的上方滚动显示打开的文件的文件名。

(5)打开下一个文件功能:在当前打开文件列表界面,若选择“打开一个文件”功能,则显示下一个文件的内容在文件编辑区。

(6)文件内容修改提示功能:若在打开的文件中对其内容进行了修改,在关闭文件时将会提示文件的内容已经被修改的消息,用户可选择是否保存修改后的内容。

(7)删除文件功能:可以在文件列表上对指定文件进行删除操作,也可以打开文件后,对打开的文件进行删除操作。

(8)软键盘输入功能:软键盘支持英文输入,Cap键支持大小写英文切换,提供Shift键的上下字符切换功能,Enter可以进行回车换行,其ESC键执行软键盘退出功能。软键盘上的按键与物理键盘的按键位置相对应。

(10)给用户提供友好的图形用户界面,并合理安排界面元素布局,使其交互性好且方便用户操作。

1.4 基于TCP的Qt网络

TCP即Transmission Control Protocol,传输控制协议。与UDP不同,它是面向连接和数据流的可靠传输协议。也就是说,它能使一台计算机上的数据无差错的发往网络上的其他计算机,所以当要传输大量数据时,我们选用TCP协议。

TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket 类来编写客户端程序,使用QTcpServer类编写服务器端程序。我们在服务器端进行端口的监听,一旦发现客户端的连接请求,就会发出newConnection()信号,我们可以关联这个信号到我们自己的槽函数,进行数据的发送。而在客户端,一旦有数据到来就会发出readyRead()信号,我们可以关联此信号,进行数据的接收。其实,在程序中最难理解的地方就是程序的发送和接收了,为了让大家更好的理解,我们在这一节只是讲述一个传输简单的字符串的例子,在下一节再进行扩展,实现任意文件的传输。

第2章文本编辑器的设计

2.1 记事本界面设计

(1)新建Qt4 Gui Application工程,将工程命名为MainWindow,其他选项默认即可。打开工程中自带的ui文件,进行界面设计。首先我们在Type Here那里双击,并输入“文件(&F)”,这样便可将其文件菜单的快捷键设为Alt+F。在需要的地方加上分隔线。其余同理,制作出下图所示界面。

(2)在工程mainwindow2中新建一个images的文件夹,从网上下载图标,复制到images中。新建Qt Resources file,将它命名为menu。其他默认。在Qt Creator的menu.qrc文件中,我们点击Add下拉框,选择Add Prefix。我们可以将生成的/new/prefix前缀改为其他名字,如/File。然后再选择Add下拉框,选择Add Files。再弹出的对话框中,我们到新建的images文件夹下,将里面的图标文件全部添加过来。添加到资源,这时再打开资源选择器,可以看到我们的图标都在这里了,我们将new.png作为“新建”菜单的图标,然后点击Shortcut,并按下Crtl+N,便能将Crtl+N作为“新建”菜单的快捷键。

(3)对所有操作加上图标,快捷键,把常用图标拖到工具栏里。界面如下图所示:

(4)先在主窗口的中心拖入一个文本编辑器Text Edit。下面我们选中主窗口部件,然后在空白处点击鼠标右键,选择Layout->Lay Out in a Grid,使整个主窗口的中心区处于网格布局管理器中。

2.2 记事本功能设计

2.2.1 新建文件,保存文件,和文件另存为

在开始正式写程序之前,我们先要考虑一下整个流程。因为我们要写记事本一样的软件,所以最好先打开windows中的记事本,进行一些简单的操作,然后考虑怎样去实现这些功能。再者,再强大的软件,它的功能也是一个一个加上去的,不要设想一下子写出所有的功能。我们这里先实现新建文件,保存文件,和文件另存为三个功能,是因为它们联系很紧,而且这三个功能总的代码量也不是很大。

新建文件,那么如果有正在编辑的文件,是否需要保存呢?如果需要进行保存,那这个文件以前保存过吗?如果没有保存过,就应该先将其另存为。

(1)添加“新建”操作的函数定义。

void MainWindow::do_file_New() //实现新建文件的功能

{ do_file_SaveOrNot();

isSaved = false;

curFile = tr(“未命名.txt”);

setWindowTitle(curFile); ui->textEdit->clear(); //清空文本编辑器ui->textEdit->setVisible(true); //文本编辑器可见

}

新建文件,先要判断正在编辑的文件是否需要保存。然后将新建的文件标志为未保存过状态。

(2)再添加do_file_SaveOrNot函数的定义。

void MainWindow::do_file_SaveOrNot() //弹出是否保存文件对话框

{

if(ui->textEdit->document()->isModified()) //如果文件被更改过,弹出保存对话框

{

QMessageBox box;

box.setWindowTitle(tr("警告"));

box.setIcon(QMessageBox::Warning);

box.setText(curFile + tr("尚未保存,是否保存?"));

box.setStandardButtons(QMessageBox::Yes | QMessageBox::No);

if(box.exec() == QMessageBox::Yes) //如果选择保存文件,则执行保存操作

do_file_Save();

}

}

这个函数实现弹出一个对话框,询问是否保存正在编辑的文件。

(3)再添加“保存”操作的函数定

void MainWindow::do_file_Save() //保存文件

{

if(isSaved)

{ //如果文件已经被保存过,直接保存文件

saveFile(curFile);

}

else{

do_file_SaveAs(); //如果文件是第一次保存,那么调用另存为

}

}

(4)下面是“另存为”操作的函数定义

void MainWindow::do_file_SaveAs() //文件另存为

{

QString fileName = QFileDialog::getSaveFileName(this,tr("另存为"),curFile);

//获得文件名

if(!fileName.isEmpty()) //如果文件名不为空,则保存文件内容

{ saveFile(fileName); }

}

(5)双击mainwindow.ui文件,在图形界面窗口下面的Action Editor 动作编辑器里,我们右击“新建”菜单一条,选择Go to slot,然后选择triggered(),进入其触发事件槽函数。同理,进入其他两个菜单的槽函数,将相应的操作的函数写入槽函数中。如下。

void MainWindow::on_action_New_triggered() //信号和槽的关联{ do_file_New(); }

void MainWindow::on_action_Save_triggered() { do_file_Save(); } void MainWindow::on_action_SaveAs_triggered()

{ do_file_SaveAs(); }

2.2.2实现打开,关闭,退出,撤销,复制,剪切,粘贴的功能

(1)打开,关闭,退出功能

先在mainwindow.h文件中加入函数的声明。 void do_file_Open(); //打开文件和bool do_file_Load(const QString& fileName); //读取文件。

再在mainwindow.cpp文件中写函数的功能实现。程序见附录

最后按顺序加入更菜单的关联函数,如下。

void MainWindow::on_action_N_triggered()

{

do_file_New();

}

void MainWindow::on_action_O_triggered()

{

do_file_Open();

}

void MainWindow::on_action_S_triggered()

{

do_file_Save();

}

void MainWindow::on_action_A_triggered()

{

do_file_SaveAs();

}

void MainWindow::on_action_X_triggered()

{

on_action_C_triggered(); //先执行关闭操作

qApp->quit(); //再退出系统,qApp是指向应用程序的全局指针

}

(2)撤销,复制,剪切,粘贴的功能

因为复制,撤销,全选,粘贴,剪切等功能,是TextEdit默认就有的,所以我们只需调用一下相应函数就行。

撤销

void MainWindow::on_action_Z_triggered()

{

ui->textEdit->undo();

}

剪切

void MainWindow::on_action_X_2_triggered()

{

ui->textEdit->cut();

}

复制

void MainWindow::on_action_C_3_triggered()

{

ui->textEdit->copy();

}

粘贴

void MainWindow::on_action_V_triggered()

{

ui->textEdit->paste();

}

2.2.3实现文本查找功能

(1)在mainwindow.h中加入#include 的头文件包含,在private中添加 QLineEdit *find_textLineEdit;声明一个行编辑器,用于输入要查找的内容。在private slots中添加 void show_findText(); 在该函数中实现查找字符串的功能。

(2)我们进入查找菜单的触发事件槽函数void MainWindow:: on_action_Find_triggered(),这里我们直接用代码生成了一个对话框,其中一个行编辑器可以输入要查找的字符,一个按钮可以进行查找操作。我们将这两个部件放到了一个垂直布局管理器中。然后显示这个对话框。并设置了那个按钮单击事件与show_findText()函数的关联。然后开始写实现查找功能的show_findText()函数。

void MainWindow::show_findText()//“查找下一个”按钮的槽函数

{

QString findText = find_textLineEdit->text();

//获取行编辑器中的内容

if(!ui->textEdit->find(findText,QTextDocument::FindBackward)) {

QMessageBox::warning(this,tr("查找"),tr("找不

到 %1") .arg(findText);

}

}

(3)结果

第3章 Qt TCP的网络应用程序设计

3.1 TCP socket 通信工作原理

网络程序是软件开发的主要方面之一.传统方法是利用套接字(Socket)进行编程。由于套接字包含了众多的函数和数据结构,因此较难掌握与使用。Qt把网络编程有关的函数和数据结构封装成各种类.使得程序的开发更加简洁与高效。本文将对Qt中与TCP网络编程进行分析,并通过一个简单的客户端,服务器程序展示如何利用这些类开发支持TCP协议的程序。

客户端:

(1)创建TCP套接口。客户端也是通过调用socket()函数来创建套接口。

(2)指定服务器IP地址和端口

(3)建立与服务器的链接。通过调用connect()函数与服务器取得链接。

(4)读入并输出服务器的应答

(5)终止程序

服务器:

(1)创建TCP套接口。客户端也是通过调用socket()函数来创建套接口。

(2)通过bind函数把socket的与主机的信息进行绑定。

(3)通过listen的函数监听客户端的连接。

(3)通过accept接受客户端的连接。

(4)读入并输出服务器的应答。

(5)终止程序。

3.2 设计过程

3.2.1 服务器端

(1)我们新建Qt4 Gui Application,工程名为“TCPSEVER”,选中QtNetwork 模块,Base class选择QWidget(说明:如果一些Qt Creator版本没有添加模块

一项,我们就需要在工程文件tcpServer.pro中添加一行代码:QT += network)

(2)我们在widget.ui的设计区添加一个Label,更改其objectName为statusLabel,用于显示一些状态信息。

(3)在widget.h文件中做以下更改。

添加头文件:#include

添加private对象:QTcpServer *tcpServer;

添加私有槽函数: private slots: void sendMessage();

(4)在widget.cpp文件中进行更改。在其构造函数中添加代码:

tcpServer = new QTcpServer(this);

if(!tcpServer->listen(QHostAddress::LocalHost,6666))

{ //监听本地主机的6666端口,如果出错就输出错误信息,并关闭qDebug() << tcpServer->errorString();

close();

}

connect(tcpServer,SIGNAL(newConnection()),this,SLOT(sendMessage()));

//连接信号和相应槽函数

我们在构造函数中使用tcpServer的listen()函数进行监听,然后关联了newConnection()和我们自己的sendMessage()函数。

下面我们实现sendMessage()函数。

void Widget::sendMessage()

{

QByteArray block; //用于暂存我们要发送的数据

QDataStream out(&block,QIODevice::WriteOnly);

//使用数据流写入数据

out.setVersion(QDataStream::Qt_4_6);

//设置数据流的版本,客户端和服务器端使用的版本要相同

out<<(quint16)0;

out<

out.device()->seek(0);

out<<(quint16)(block.size() - sizeof(quint16));

QTcpSocket *clientConnection = tcpServer->nextPendingConnection();

//我们获取已经建立的连接的子套接字

connect(clientConnection,SIGNAL(disconnected()),clientConnection

,SLOT(deleteLater()));

clientConnection->write(block);

clientConnection->disconnectFromHost();

ui->statusLable->setText("send message successful!!!");

}

这个是数据发送函数,我们主要介绍两点:(1)为了保证在客户端能接收到完整的文件,我们都在数据流的最开始写入完整文件的大小信息,这样客户端就可以根据大小信息来判断是否接受到了完整的文件。而在服务器端,我们在发送数据时就要首先发送实际文件的大小信息,但是,文件的大小一开始是无法预知的,所以我们先使用了out<<(quint16) 0;在block的开始添加了一个quint16大

小的空间,也就是两字节的空间,它用于后面放置文件的大小信息。然后out<seek(0);返回到block的开始,加入实际的文件大小信息,也就是后面的代码,它是实际文件的大小:out<<(quint16) (block.size()-sizeof(quint16));(2)在服务器端我们可以使用tcpServer的nextPendingConnection()函数来获取已经建立的连接的Tcp 套接字,使用它来完成数据的发送和其它操作。比如这里,我们关联了disconnected()信号和deleteLater()槽函数,然后我们发送数据clientConnection->write(block); 然后是clientConnection->disconnectFro mHost();它表示当发送完成时就会断开连接,这时就会发出disconnected()信号,而最后调用deleteLater()函数保证在关闭连接后删除该套接字clientConnection。

3.2.2 客户端

我们在客户端程序中向服务器发送连接请求,当连接成功时接收服务器发送的数据。

(1)我们新建Qt4 Gui Application,工程名为“tcpclient”,选中QtNetwork 模块,Base class选择QWidget。我们在widget.ui中添加几个标签Label和两个Line Edit以及一个按钮Push Button。

其中“主机”后的Line Edit的objectName为hostLineEdit,“端口号”后的为portLineEdit。“收到的信息”标签的objectName为messageLabel 。

(2)在widget.h文件中做更改。

添加头文件:

#include

添加private变量:

QTcpSocket *tcpSocket; QString message; //存放从服务器接收到的字符串 quint16 blockSize; //存放文件的大小信息

添加私有槽函数:

private slots: void newConnect();//连接服务器

void readMessage(); //接收数据

void displayError(QAbstractSocket::SocketError); //显示错误

(3)在widget.cpp文件中做更改。

在构造函数中添加代码:

tcpSocket = new QTcpSocket(this);

connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessage()));

connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),

this,SLOT(displayError(QAbstractSocket::SocketError)));

这里关联了tcpSocket的两个信号,当有数据到来时发出readyRead()信号,我们执行读取数据的readMessage()函数。当出现错误时发出error()信号,我们执行displayError()槽函数。

(4)实现newConnect()函数。

void Widget::newConnect()

{

blockSize = 0; //初始化其为0

tcpSocket->abort(); //取消已有的连接

tcpSocket->connectToHost(ui->hostLineEdit->text(),

ui->portLineEdit->text().toInt());

//连接到主机,这里从界面获取主机地址和端口号

}

这个函数实现了连接到服务器,下面会在“连接”按钮的单击事件槽函数中调用这个函数。

(5)实现readMessage()函数

void Widget::readMessage()

{

QDataStream in(tcpSocket);

in.setVersion(QDataStream::Qt_4_6);

if(blockSize==0) //如果是刚开始接收数据

{

//判断接收的数据是否有两字节,也就是文件的大小信息 //如果有则保存到blockSize 变量中,没有则返回,继续接收数据 if(tcpSocket->bytesAvailable() < (int)sizeof(quint16)) return;

in >> blockSize;

}

if(tcpSocket->bytesAvailable() < blockSize) return;

//如果没有得到全部的数据,则返回,继续接收数据

in >> message;

//将接收到的数据存放到变量中

ui->messageLabel->setText(message);

//显示接收到的数据

}

这个函数实现了数据的接收,它与服务器端的发送函数相对应。首先我们要获取文件的大小信息,然后根据文件的大小来判断是否接收到了完整的文件。

(6)实现displayError()函数

void Widget::displayError(QAbstractSocket::SocketError)

{

qDebug() << tcpSocket->errorString(); //输出错误信息

}

这里简单的实现了错误信息的输出。

(7)我们在widget.ui中进入“连接”按钮的单击事件槽函数,然后更改如下。

void Widget::on_pushButton_clicked() //连接按钮

{

newConnect(); //请求连接

}

这里直接调用了newConnect()函数。

3.2.3 结果

我们运行程序,同时运行服务器程序,然后在“主机”后填入“localhost”,在“端口号”后填入“6666”,点击“连接”按钮,效果如下。

可以看到我们正确地接收到了数据。因为服务器端和客户端是在同一台机子上运行的,所以我这里填写了“主机”为“localhost”,如果你在不同的机子上运行,需要在“主机”后填写其正确的IP地址。到这里我们最简单的TCP应用程序就完成了。

qt程序在linux console模式下运行

Qt程序在linux Console模式下运行 原文链接:在x86非图形界面下运行QtEmbedded程序 众所周知,一般我们在桌面环境下可以使用qvfb这个工具作为运行QtEmbedded程序的模拟器环境,但我们今天不讲这些大家都知道的事情。 回顾一下QtEmbedded对系统以及硬件的要求,一般来说只有下面少少的几点: 1、 Linux内核+ framebuffer驱动+ socket支持 2、 /tmp可写 3、有合适的键盘和鼠标(触摸屏)驱动并做好与Qt的集成 4、合适的编译器和交叉编译工具链(toolchain) 那么聪明的同学已经想到了,为什么我们不能直接在桌面的linux系统中运行QtE程序呢?似乎QtE的要求我们的桌面系统一样可以满足亚。答案当然是肯定的。 一条一条来说的话, 1内核支持framebuffer和socket这一条大部分发行版默认的内核就可以; 2就不用说了;3在QtE的源码里自带了对普通桌面鼠标和键盘硬件的驱动;4对于X86系统,普通的gcc就可满足,一般linux发行版带的gcc版本也基本可以满足QtE编译的要求。 那么,怎么才能实现我们的想法呢?还是要一步一步按部就班来做。以笔者的Ubuntu 为例,介绍一下设置的具体步骤。 编译QtEmbedded 这一步编译和编译qvfb版本区别不大,只是不再需要configure的时候加-qvfb参 数,只用不加参数的configure足矣。 # tar -zxvf qt-em bedded-linux-opensource-src-4.5.1.tar.gz # cd qt-em bedded-linux-opensource-src-4.5.1 # ./configure -embedded x86 –qvfb // 我的编译情况是: ./confignre –prefix /work/Trolltech/QtEm bedded-4.5.1–no-o penssl # gmake # gmake install qt-em bedded 被安装在这个目录下/usr/local/Trolltech/QtEmbedded-4.5.1 设置环境变量: # vi ~/.bashrc 把下面的加上去 export QTEDIR=/usr/local/Trolltech/QtEm bedded-4.5.1 export PATH=/usr/local/Trolltech/QtEm bedded-4.5.1/bin:$PAT H export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEm bedded-4.5.1/lib:$LD_LIBRA RY_PATH

java文本编辑器实验报告

Java考核 课程名称Java程序设计 题目名称文本编辑器的设计与实现学生学院计算机学院 专业班级计算机17(2)班 学号3117004479 学生姓名李泽豪 指导教师赵锐 2018 年12 月11 日

一、课程题目 编程实现一个文本编辑器 使其具有新建、打开、保存,编辑(查找、替换、大小写转换等)、统计(字数、行数、字符数等)、格式(字体设置、字体大小、字体颜色、背景颜色等)等功能。 要求:基于JFrame窗体设计、使用菜单进行功能选择。 提示:字体颜色,背景颜色的设置,可使用javax.swing包中的JColorChooser类的静态方法showDialog()调用标准颜色对话框来完成;文件操作可通过javax.swing包中JColorChooser类中的showSaveDialog()、showOpenDialog()方法调用标准的的文件对话框来完成。 二、题目分析与设计 2.1开发环境 使用Eclipse开发软件 2.2需求分析 简单的文本编辑器提供给用户基本纯文本的文字编辑功能,能够读取计算机本地磁盘中的文本内容,将用户文本导入到磁盘中之中,以及实现基本的字体设置(字体,字号,字体颜色)简单的编辑字体的功能,以及统计(字数,行数,字符数),增强视觉体验的背景颜色功能等,简单而实用。而网络上的各种编辑器,有的功能不足(如自带的记事本),而有些编辑器功能太繁杂,仅以日常应用方面来说,一个文本编辑器只需要简单的功能就够了。 2.3功能构架 本程序要构建的文本编辑器按照题目要求,分为四个方面: (1)“文件”菜单:包括“新建”并提示是否保存已编辑内容,“打开”计算机本地磁盘的文本文件,主动“保存”自己已经编辑好的内容到电脑的磁盘或“另存为”新的文件之中,以及“退出”并提示是否保存已编辑的内容。 (2)“编辑”菜单:包括对已编辑文本的一个“查找与替换”功能,对已编辑英文文本的一个“大小写转换”功能。 (3)“格式”菜单:实现对文本的“字体”设置,“字体大小”以及“字体颜色”,还有

UEDITOR自定义默认宽度高度

最近需要使用到网页后台富文本编辑器。经过同学推荐,最后决定使用百度家的Ueditor. 官方提供了网页上非常方便的自定义工具栏的功能。自定义之后直接下载对应的代码包并按照文档部署到项目中即可。其中主要的问题是路径的配置。 首先是将下载好的代码包发布到我们项目的根目录下面。然后在需要添加富文本编辑器的页面头部添加如下代码: 1. <script type="text/javascript" src="相对该文档的路径 /ueditor/ueditor.config.js"></script> 2. <script type="text/javascript" src="相对该文档的路径 /ueditor/ueditor.all.js"></script> 3. <script> 4. <span style="white-space:pre"> </span>window.UEDITOR_HOME_URL = "/项目相对网 址池绝对路径/ueditor"; 5. </script> 配置路径这一块是非常重要的。特别是下面的Ueditor的路径,是相对我们整个代码库的目录的。 配置完成之后,直接在我们网页中的<textarea>标签下面添加ueditor的初始化代码: 1. <script type="text/javascript"> 2. var editor = new UE.ui.Editor({initialFrameHeight:100,initialFrameWidth: 400 }); 3. editor.render("actDescribe"); 4. </script> 官方的文档并没有给出如何设置ueditor的宽度和高度的说明。这是我在网上网友那里找到的解决方法。在声明编辑器的变量的时候,在参数列表中添加对initialFrameHeight和initialFrameWidth的设置即可。注意,数值后面不需要添加px。 可是,这种方法有时候奏效有时候也不奏效,因为我碰过一种情况就是无论如何调整initialHeight和initialWidth的数值,编辑器的大小都还是不会改变。这个时候,我发现,可以通过调整editor所跟随的textarea的宽高来撑开editor的大小。这也是一种方法,各位同学在官方说明文档出来之前可以两种方法都尝试一下。 当然,好用的文本编辑器还是有很多的,例如kindeditor,之前准备使用这个的,而其文档方面也比较齐全,同时,整个编辑器的size也比较小,对网页的加载速度比较有利。百度的Ueditor还是有点庞大。加载时会有卡顿的速度。估计是我对底层代码的研究不够,多了很多不必要的内容。慢慢研究或许可以使得Ueditor变小。

简易文本编辑器说明书

中北大学 课程设计说明书 学院、系: 专业: 班级: 学生姓名:学号: 设计题目:简易文本编辑器 起迄日期: 2016年12月16日~2016年12月29日指导教师: 日期: 2016年12月29日

1 设计目的 通过用户调查分析及实际需求,开发出一个文本编辑器,可以方便用户对文本进行编辑。系统需要实现如下基本功能: (1)具有图形菜单界面; (2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除;(3)可正确存盘、取盘; (4)正确显示总行数。 2 任务概述 要设计一简易的文本编辑器,要求有图形菜单界面,也就是菜单选择的界面,要实现的功能有对文本进行存盘,取盘,在某一个盘中新建一个TXT的文件,在里面输入内容,对这个文件进行取盘,显示出文本内容,并在显示的时候显示行数,具有对文本进行查找、替换、插入、移动、删除等功能。 为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的两个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息: ⑴显示当前文本信息:从文件中读出文本,在某一个盘中创建一个文本文件,所以要读出来, 显示到显示器上,并统计出行数。 ⑵查找文本信息:因为在下面做插入,删除,移动之类的都需用到查找,在查找的时候,也要 调用一个字符匹配模式的程序,来判断查找的内容是否符合所要查找的内容。 ⑶删除文本信息:首先在数组中查找要删除的信息,查找的时候调用匹配模式的子函数,如果 找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息; ⑷插入文本信息:首先调用字符匹配模式的子函数找到插入点,如果找到该插入点,提示输入 插入信息,确认插入信息后,选择是否在这个位置插入,如果是的话执行插入,不是的话再往下查找下一个插入点。 ⑸替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的 信息内容,否则提示未找到要被替换的信息; ⑹保存文本信息:在这里使用文件写入读出的功能,把你修改完的内容保存到你所建立的文 本中。 ⑺显示文本内容:读出文件中的所有字符,显示到显示器上。 ⑻退出 3 模块划分 (1)系统主要包含主程序模块和其他操作模块。其调用关系如图(一)所示。

java课设—文本编辑器的设计与实现

淮 海 工 学 院 计算机工程学院
课程设计报告
设计名称: 选题名称: 姓 名: 面向对象课程设计 文本编辑器的设计与实现 学 号:
专业班级: 系 (院) : 设计时间: 设计地点: 计算机工程学院 2015.6.21~2014.7.4 计算机楼机房、教室、宿舍
指导教师评语:
成绩:
签名:
年 月 日

面向对象课程设计报告

1
页,共
14

1.课程设计目的
《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程 后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理 论、方法和基础知识的理解,掌握使用 Java 语言进行面向对象设计的基本方法,提高运用 面向对象知识分析实际问题、解决实际问题的能力。
2.课程设计任务与要求:
课程设计可选用 NetBeans、Eclipse、JBuilder 等作为开发平台以提高开发效率,尽可能熟 练掌握其中一种集成开发环境。建议采用 UML 建模技术进行系统的分析设计,在 Visio 中画出系 统用例图和类图,并将 UML 图复制到设计报告中。 通过这次设计,要求掌握以下内容: 1)面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用 2)类、包、接口的定义与使用 3)常用工具类与算法的实现(数组、向量、字符串、链表) 4)Java 常用标准 GUI 组件及其事件处理 5)Java 的异常处理机制 6)Java 的数据库连接技术 7)Java 的多线程技术与动画制作 8)Java 的网络编程 任务: 设计一个类似于 Windows 记事本(Notepad)的 Java 程序。可以打开、新建、保存一个文本 文件;对选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复 制、粘贴、剪切、查找、替换等) ;在文本中能够插入对象。简单文本编辑器提供给用户基本的 纯文本编辑功能, 能够将用户录入的文本存储到本地磁盘中。 能够读取磁盘中现有的纯文本文件, 以及方便用户进行需要的编辑功能。

百度编辑器ueditor的toolbars的各个元素代表的功能说明

fullscreen 功能解释:全屏 source 功能:html源码 undo 功能:撤销 redo 功能:重做 bold 功能:加粗 italic 功能:斜体 underline 功能:下划线 fontborder 功能:字符边框 strikethrough 功能:删除线 superscript 功能:上标 subscript 功能:下标 removeformat 功能:清除格式 formatmatch 功能:格式刷 autotypeset 功能:自动排版 blockquote 功能:引用 pasteplain 功能:纯文本粘贴模式 forecolor 功能:字体颜色 backcolor 功能:背景色 insertorderedlist 功能:有序列表 insertunorderedlist 功能:无序列表 selectall 功能:全选 cleardoc 功能:清空文档 rowspacingtop 功能:段前距

rowspacingbottom 功能:段后距 lineheight 功能:行间距 customstyle 功能:自定义标题 paragraph 功能:段落格式 fontfamily 功能:字体 fontsize 功能:字号 directionalityltr 功能:从左向右输入 directionalityrtl 功能:从右向左输入 indent 功能:首行缩进 justifyleft 功能:居左对齐 justifycenter 功能:居中对齐 justifyright 功能:居右对齐 justifyjustify 功能:两端对齐 touppercase 功能:字母大写 tolowercase 功能:字母小写 link 功能:超链接 unlink 功能:取消链接 anchor 功能:锚点 imagenone 功能:默认 imageleft 功能:左浮动 imageright 功能:右浮动 imagecenter 功能:居中 simpleupload 功能:为选择文件【单个图片上传】

Linux-Ubuntu 下 Qt 4.7.1静态编译

Qt的静态编译是本文介绍的内容,相比较来说windows的Qt静态编译比较容易,相反对于linux编译网上的文章实践下来都有这样那样的错误,这里简要小结一下自己的编译成果。 一、实验环境 1Ubuntu 10.04 2qt-x11-opensource-4.7.1.tar.gz 二、前期准备 在安装好Ubuntu 10.04后默认是没有安装程序编译软件包的,所以我们首先是要配置ubuntu。 配置方法:(推荐全程root用户模式) 1、首先调整网络设置使得机器可以上网(具体做法因人而异,这边就忽略不计) 2、需要配置的安装包:输入命令: 3apt-get install build-essential libpcap0.8-dev libx11-dev libfreetype6-dev 4libavahi-gobject-dev libSM-dev libXrender-dev libfontconfig-dev libXext-dev 三、静态编译Qt 1、下载qt-x11-opensource-4.7.1.tar.gz 2、解压缩qt-x11-opensource-4.7.1.tar.gz 3、配置path 输入命令: 5export PATH="$PATH:/usr/local/Trolltech/Qt-4.7.1/bin" 4、进入qt解压目录,配置configure命令:./configure -static -nomake demos

-nomake examples -nomake tools -no-exceptions 5、分别输入“o”和“y”以后进入编译阶段 6make 7make install 慢慢等吧…… 四、静态编译Qt程序 1、建立文件夹,然后写程序文件XX.cpp 2、qmake -project 3、生成pro文件后在里面加入CONFIG += static 4、qmake 5、生成Makefile后在cxxflags的=后插入-static 6、make 小结:实现Ubuntu 下Qt4.7.1静态编译的内容介绍完了,希望本篇的静态编译读你有所帮助。 【编辑推荐】 8Qt中根据不同版本号使用不同源码 9解析Qt资源文件使用 10深度解析QT 介绍跨平台界面库 11Windows下Qt 静态编译连接 12浅谈Qt 静态编译 原文参考:https://www.360docs.net/doc/1415157549.html,/symbian-270510.htm

ueditor文本编辑器

百度编辑器 UEditor
演示地址:https://www.360docs.net/doc/1415157549.html,/website/onlinedemo.html Ueditor 是由百度 web 前端研发部开发所见即所得的编辑器,具有轻量,可定制,注重 用户体验等特点。Ueditor 基于 BSD 开源协议,除了具有代码精简、加载迅速的轻量级特质 外,还采用了分层理念,使开发者可以根据实际应用和需求自由定制。 Ueditor 编辑器划分为了三层架构。其中,核心层为开发者提供了诸如 range、 selection、 domUtils 类的底层 API 接口, 中间的命令插件层不仅提供了大量的基础 command, 还允许开发者基于核心层进行 command 命令的开发, 而面向用户端的界面层则可以提供自由 定制的用户交互界面。Ueditor 开源编辑器这种拥有可配性的模式,令开发者能够根据自身 需要接入任何一层进行开发。
完整版的部署与体验
一、官网上下载完整源码包,解压到任意目录,解压后的源码目录结构如下所示: _examples:编辑器完整版的示例页面 _demos:编辑器的各种使用案例 dialogs:弹出对话框对应的资源和 JS 文件 themes:样式图片和样式文件 server:涉及到服务器端操作的 PHP、JSP 等文件 third-party:第三方插件 editor_all.js:_src 目录下所有文件的打包文件 editor_all_min.js:editor_all.js 文件的压缩版,建议在正式部署时才采用 editor_config.js:编辑器的配置文件,建议和编辑器实例化页面置于同一目录 二、部署 UEditor 到实际项目(UETest)中的步骤:
图表 1 第一步:在项目的任一文件夹中建立一个用于存放 UEditor 相关资源和文件的目录,此

【IT专家】Qt程序发行Linux版,软件打包知识(patchelf 工具修改依赖库,确认 qmake

本文由我司收集整编,推荐下载,如有疑问,请与我司联系Qt程序发行Linux版,软件打包知识(patchelf 工具修改依赖库,确 认qmake 2017/06/02 449 patchelf 工具可以修改已编译运行程序的依赖库位置和指定库链接器 ?patchelf --set-rpath ?patchelf --set-interpreter ?通过这个工具https://github/probonopd/linuxdeployqt如果自己编译不了,也可以下载现成的 ?https://github/probonopd/linuxdeployqt/releases ?运行./linuxdeployqt-2-x86_64.AppImage ShanbayDict 并为成功,生成的lib目录下的so文件很少。 ?运行./linuxdeployqt-2-x86_64.AppImage ShanbayDict -appimage 也未成功,但lib 生成了很多so文件 ?使用patchelf --set-rpath /opt/Qt-5.7-static/lib/:./lib ShanbayDict 修改rpath后,ShanbayDict可以独立运行了,连同lib一起拷贝到新安装的Ubuntu 16.04系统中,也能运行了。 ?ldd ShanbayDict 显示,rpath已经指向./lib目录 ?patchelf可以通过sudo apt installpatchelf 安装 ?2017年2月24日 ?Qt 5.8编译的Qt程序 ?设置环境变量,确认qmake -v 是自己使用的Qt版本,如果不是,解决办法是: ?export PATH=/home/lieefu/Qt5.8.0/5.8/gcc_64/bin:$PATH ?创建qml目录,把/home/lieefu/Qt5.8.0/5.8/gcc_64/qml 目录下用到的模块复制过来,我的app用到了三个QtQuick、QtQuick.2、QtMultimedia。 ?增加plugin中platforminputcontexts 包括libfcitxplatforminputcontextplugin.so文

数据结构 简易文本编辑器

题目: 【2】.简易文本编辑器 要求: 1) 具有图形菜单界面; 2) 查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除 3) 可正确存盘、取盘; 4) 正确显示总行数。 1需求分析 一个简易文本编辑器应该具有图形菜单界面,包括查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除文本信息等功能并可正确存盘、取盘,正确显示总行数。 2概要设计 为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息: ⑴清空以前的文本信息:将用数组存的数据内容全部置为0; ⑵显示当前文本信息:遍历用数组存入的信息,并输入到外部显示器上; ⑶编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整 型变量,这个整型变量用于记录一维数组中存入数据的个数; ⑷替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入 要替换的信息内容,否则提示未找到要被替换的信息; ⑸插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入 信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置; ⑹移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行 列移动还是进行行移动,否则提示未找到要移动的信息; ⑺删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确

【优质】ueditorword导入编辑-word范文模板 (13页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为word格式,下载后可方便编辑和修改! == ueditorword导入编辑 篇一:百度编辑器UEditor的插件开发 百度编辑器UEditor的插件开发 1.概述 UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器,具有轻量、可定制、注重用户体验等特点,开源基于BSD协议,允许自由使用和修改代码。 2.下载UEditor 截至201X.11.27,最新版本为1.3.5,下面是具体的相关文档的下载地址: 百度官网下载地址:/website/download.html#ueditor;官方文档资料地址:/website/document.html;官方API地址:/doc/。 3.源码包文件说明 从官网上下载完整源码包,解压到任意目录,解压后的源码目录结构如下所示: ?_examples:编辑器的示例页面 ?dialogs:弹出对话框对应的资源和JS文件 ?themes:样式图片和样式文件 ?editor.config.js:编辑器的配置文件 ?editor.api.js:开发版的所有js文件导入 ?editor.all.js:使用版的所有js文件 ?lang:语言文件 ?jsp、net、php:涉及到服务器端操作的文件

?third-party:第三方插件 4.部署和使用 UEditor可供普通用户使用,同时UEditor的插件机制也为二次开发者提供了自定义插件的开发。 1)在项目的任一文件夹中建立一个用于存放UEditor相关资源和文件的目录。 2)创建简单的编辑器实例,首先在html页面中准备一个dom容器,容器可以是

,也可以是标签。 3)引入相关文件 4)创建编辑器 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

【IT专家】《Linux与Qt程序设计》知识框架

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 《Linux与Qt程序设计》知识框架 本文主要是通过一本书来大致了解Qt开发的框架,不对具体内容做详细分析。?1.首先弄清楚概念:定义- 以自己的话理解是什么- 实现的是什么功能- 用在哪些地方 ?2.前面认识到的知识点的特点- 代码实现- 工程代码分析 ?第一部分Linux基础知识第二部分Qt程序基础第5章OtCreator下载与安装5.1 QtCreator下载5.1.1 使用软件中心下载QtCreator5.1.2 访问Qt网站下载相关资源5.2 第一个Qt程序5.3 QtCreator介绍5.3.1 QtCreator界面介绍5.3.2 编译、调试、发布设置5.4 QtDesigner介绍第6章Qt基础6.1 Qt概述与特性6.1.1 Qt简介6.1.2 Qt特性 ?Qt SDK包括:Qt库、Qt Creator IDE、Qt工具:Qt Designer、Qt Linguist(消除国际化流程障碍)、Qt Assistant. ?6.2 Qt与Xll的关系6.2.1 什么是X116.2.2 Qt与Xl16.3 Qt与KDE的关系6.3.1 KDE简介6.3.2 Qt与KDE6.4 Qt库和组件 ?Qt SDK中主要包括类库、开发工具、平台相关支持、授权许可等。 ?其中类库包含了Qt的所有对外发布的功能组件: ?1)Core: Qt4的基本模块,定义了其他模块使用的Qt核心的非GUI类,所有其他模块都依赖于该模块。 ?2)GUI: 定义了图形用户界面类 ?3)WebKit:提供了一个在Qt中使用Web Browser的渲染与解析引擎。 ?4)Graphic View:提供的是一种Qt Model-View编程模式,既可以管理大数量的定制2D graphical items,又可以与它们交互,由于一个视图窗口可以把这些项绘制出来,并支持旋转与缩放。 ?5)Scripting:提供了对脚本(如:Java、Python、Perl、Ruby)的支持。 ?6)OpenGL ?7)XML: 定义了处理XML(eXtensible Markup Language)语言的类。

C++课程设计简易文本编辑器

目录 第一章课程设计目的和要求 (1) 1.1课程设计的目 (1) 1.2基本要求 (1) 第二章课程设计任务内容 (2) 2.1设计背景 (2) 2.2简易文本编辑器设计内容 (2) 第三章详细设计 (3) 3.1总体结构图 (3) 3.2函数分析 (3) 3.3主函数程序流程图 (4) 3.4子函数流程图 (5) 第四章程序编码与调试 (7) 4.1程序编码 (7) 4.2编码调试 (8) 4.3运行结果 (9) 第五章课程设计心得与体会 (11) 附录1 参考文献 (12) 附录2 源程序代码 (13)

第一章课程设计目的和要求 C语言课程设计是一门实践性非常强的课程,不但要注重c语言程序设计基本知识的学习,更要注重程序设计技能的培养,使学生能够允许渐进地把握c语言程序设计的技能。通过课程设计,培养学生阅读和编写程序的能力,培养计算机程序设计的能力和素质,以及思维方法。初步积累编程经验,打下良好的计算机应用基础。 1.1课程设计的目 1.通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力, 能更好的巩固《c语言程序设计》课程学习的内容 2.掌握工程软件设计的基本方法,强化上级动手编程能力,闯过理论与实践相 结合的难关!更加了解了c语言的好处和其可用性。 3.掌握基本的程序设计过程和技巧,掌握基本的分析问题合理性,通过计算机 求解问题的能力,具备初步的高级语言程设计能力。为后续个门计算机课程 的学习和毕业设计打下结实基础。 4.通过c语言课程设计,使学生了解高级程序设计语言的结构。 1.2 基本要求 1.基本要求: ①要求用VC中的MFC控件打开和保存文件。 ②要求在设计的程序中至少能完成六种编辑功能。 ③完成的程序界面要美观,能够完成六种编辑的全过程。 2.创新要求: ①在记事本中增加工具栏,工具栏中应有常使用的工具按钮; ②在记事本中增加状态栏;

项目一:文本编辑器的设计与实现

课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注 项目一:文本编辑器的设计与实现 【项目背景】 文本编辑器有两类:单文档和多文档文本编辑器。单文档文本编辑器一次只能打开一个文件,如果要打开另一个文件,必须关闭当前打开的文件,微软的写字板程序就是单文档字处理程序。多文档文本编辑器允许同时打开多个文件,每个文件占用一个子窗口,微软的Word程序就是多文档字处理程序。本项目主要介绍建立单文档文本编辑器的方法,通过分析现有文本编辑器的功能与操作过程,利用C#开发一个新的文本编辑器。 【主要内容与技能要求】 (1)会进行复杂窗口设计 (2)会对常见的文本编辑功能进行分析与编码实现 (3)会设计多文档窗口 一、预备知识 本项目主要利用RichTextBox控件来构成文本编辑区域。 1、RichT extBox控件的主要属性 属性SelectedText、SelectionLength、SelectionStart: 属性SelectionFont: 属性SelectionColor: 属性Lines: 属性Modified: 事件SelectionChange: 事件TextChanged: 2、RichT extBox控件的主要方法 方法Clear(): 方法Copy()、Cut()、Paste(): 方法SelectAll(): 方法Find(): 方法SaveFile()和LoadFile():

课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注方法Undo(): 方法Redo(): 二、功能设计与实现 1、剪贴板功能 放RichTextBox控件到窗体。属性Name=richTextBox1,Dock=Fill,Text=""。 private void menuItemEditCut_Click(object sender,EventArgs e) { richTextBox1.Cut(); } //剪切 private void menuItemEditCopy_Click(object sender,EventArgs e) { richTextBox1.Copy(); } //拷贝 private void menuItemEditPaste_Click(object sender,EventArgs e) { richTextBox1.Paste(); } //粘贴 private void menuItemEditUndo_Click(object sender,EventArgs e) { richTextBox1.Undo(); } //撤销 private void menuItemEditRedo_Click(object sender,EventArgs e) { richTextBox1.Redo(); } //恢复 2、存取文件功能 文本编辑器都应具有文件存取功能,菜单顶级菜单项“文件”的弹出菜单中一般包括如下菜单项:新建、打开、关闭、保存和另存为等。需要用到打开文件对话框(OpenFileDialog控件)和保存文件对话框(SaveFileDialog控件)。和 两个对话框的常用属性和方法: 属性Filter:例如Filter=“纯文本文件(*.txt)|*.txt|所有文件(*.*)|*.*” 属性FilterIndex: 属性FileName: 属性InitialDirectory: 属性DefaultExt: 方法ShowDialog(): 存取文件功能实现如下:

细数几款免费好用的在线HTML编辑器

细数几款免费好用的在线HTML编辑器 先普及一下基本知识:什么叫在线HTML编辑器?说得简单点,在线HTML编辑器就是在网上发帖子、写博客的那个带编辑功能的框框,可以进行图文排版等操作。当年本菜鸟做网站的时候,曾经自己用javascript编写过一个比较简单的在线HTML编辑器,用于文本内容的排版。但是因为水平有限,很多功能都无法实现。后来有了eWebEditor,功能确实强大,但这个编辑器是个收费的软件,并且正因为功能强大,也就显得过重,一些轻量的场合不是太适用。那有没有既免费、又功能强大、还能适应轻量场合的在线HTML编辑器呢?答案肯定是有的。这首先要感谢这些年来有一批奉献精神的程序猿们不断推进共享软件的开发,让我们得以享受他们的成果。一、百度出品的UEditorUEditor是由百度web 前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。特别要说的是,头条号后台发布文章的编辑器就是用的UEditor!百度UEditorUEditor还有一个轻量版的,叫做UMeditor,简称UM。UM是为满足广大门户网站对于简单发帖框,或者回复框需求所定制的在线HTML编辑器。主要特点是容量和加载速度上的改变,主文件的代码量为139k,而且放弃了使用传统的iframe模式,采用了

div的加载方式,以达到更快的加载速度和零加载失败率。UM的第一个使用者是百度贴吧,以经受贴吧每天几亿的pv 的考验,功能设计应当是最优化的了。当然随着代码的减少,UM的功能对于UE来说还是有所减少,但也有增加,比如拖拽图片上传,chrome的图片拖动改变大小等。百度UEditor界面二、xhEditor开源HTML编辑器xhEditor是一个基于jQuery开发的简单迷你并且高效的可视化HTML编辑器,基于网络访问并且兼容IE 6.0+,Firefox 3.0+,Opera 9.6+,Chrome 1.0+,Safari 3.22+。xhEditor完全基于Javascript 开发,可以应用在任何的服务端语言环境下,例如:PHP、ASP、https://www.360docs.net/doc/1415157549.html,、JA V A等。可以在CMS、博客、论坛、商城等互联网平台上完美的嵌入运行,能够非常灵活简单的和您的系统实现完美的无缝衔接。 主要特点:精简迷你:初始加载4个文件,包括:1个js(50k)+2个css(10k)+1个图片(5k),总共65k。若js和css文件进行gzip压缩传输,可以进一步缩减为24k左右。使用简单:简单的调用方式,加一个class属性就能将textarea变成一个功能丰富的可视化编辑器。无障碍访问:提供WAI-ARIA全面支持,全键盘精细操作,全程语音向导,提供完美无障碍访问体验,充分满足残疾人的上网需求。内置Ajax上传:内置强大的Ajax上传,包括HTML4和HTML5上传支持(多文件上传、真实上传进度及文件拖放上传),剪切板上传及远程抓

QT程序,如何在ARM板上运行

QT程序,如何在ARM板上运行写这篇文章,主要是为了说明怎么让PC机下编译好的QT程序移植到板子上运行。在说明之前,我们要了解一个事情,就是QT。QT是一个跨平台的开发工具,具有很好的移植性,它所依赖的库文件在PC机上和在ARM上是不一样的,那么我要怎么做呢? 很简单,就是重新编译已经写好的QT程序。为什么需要重新编译,第一,ARM的CPU的指令集和PC的CPU指令集肯定是不一样的,也就是需要交叉编译。第二:由于QT所依赖的库文件不一样,在不同的指令集得CPU里,库是需要移植的。我这里假设ARM板的文件系统里已经移植好了QT相关的库文件(具体怎么移植,我会再写一篇文章),移植好后,在开发板上就可以移植QT程序了。 那么,具体我要怎么编译呢?我们都知道,编译好的QT的程序,一般会有几个.CPP\.h文件,这么多的文件我们要怎么样编译。首先,我们需要安装QT版本的库,一定要注意,这个库文件一定和开发板上的是同一个库。我们假设这个库名字叫qtembed450-arm。以下步骤一定要注意: 1.安装目录一定要在“/usr/local/”下; 2.安装成功后,这步非常关键,一定要设置环境变量,而且,我们要设置三个环境变量,这样做有三个目的:①可以在任何路径下用库里的命令②编译时候可以指定编译规则为 arm-linux-g++③编译时候可以指定到所需要的库文件。那么安装后,输入一下命令:gedit /root/.bashrc.这个命令执行后就进入到设置环境变量的地方,我们要加入以下三个环境变量的设置: export PATH=$PATH:/usr/local/qtembed450-arm/bin export LD_LIBRARY_PATH=$LD_LTBRARY_PATH:/usr/local/qtembed450-arm/lib export QMAKESPEC=/usr/local/qtembed450-arm/mkspecs/default 以上设置非常的重要,非常的关键。呵呵,先照着设置,具体原因我会细谈。注意,我编译用的很重要的qmake-arm 命令,就在/usr/local/qtembed450-arm/bin下,可以打开看看哦!环境变量设置好后,用which qmake-arm 命令来确认下是否成功,呵呵。 3.准备工作做到这里,算是进行一半了,哎,真累啊!还要接着写呢。接下来我们要把我们的编译好的QT程序的文件夹打开,把里面的 .CPP/.h文件拷贝出来,新建立一个文件夹; 4.把以上的文件里的.cpp .h文件复制后新建立一个文件夹。 5.新文件夹建立后,在linux终端中进入到该文件夹所在目录下,执行这个命令:qmake-arm -project命令,千万注意,-project 和arm之间一定要有空格啊!该命令执行后,会生成一个.pro文件,紧接着呢,执行qmake-arm命令,该命令执行后呢,会生成一个Makefile文件,这步很关键哦,没有这步就不会有Makefile文件,一般在这步会出现很多错误,就是库没有发现之类,这个时候,一定要检查前面的步骤,仔细检查看是否是错误。我们这个时候打开Makefile文件看一下,会发现,里面的编译已经变成 arm-linux-g++。这个时候,就踏实,接下来怎么办?还用问吗,直接make下就好了,哈哈,简单吧!看到上面的qtmyjpg文件了吗?这个是可以在开发板上运行的哦!接下来

C++课程设计报告(简易文本编辑器)

面向对象程序设计课程设计报告 (2011/2012学年第二学期) 题目名称简单文本编辑器的设计 系部 专业计算机科学与技术 班级 学生 完成时间 2012年 6 月 指导老师

在文本编辑器出现前,人们用打孔机把计算机文字打到穿孔卡片上。文字存放于一个装着这样的薄卡片的盒子里,可以用读卡器来阅读它。 第一个文本编辑器是一种行编辑器,它运行在打字机型的终端上,这种编辑器并不具备在窗口和屏幕中显示的功能。它包含了一些非常短的命令(为了减少打字量)。其中一个命令能够把文件的指定部分通过打字机打印出来。编辑光标是想象中的一个插入点,通过特殊命令,可以把它移动到特定内容字符串所在的行。随后,内容字符串又被扩展成正则表达式。如果想看到文件的变化,你需要把它打印出来。相对于穿孔机来说,人们认为这种基于行的文本编辑器具有革命性的进步。如果没有它,用户就需要把那些处理文本的命令打成专用的卡片,并在编辑文件时使用这些卡片。 当带有显示屏的计算机终端出现后,基于显示屏的文本编辑器开始流行起来。最早的全屏编辑器中,有一种叫做O26,它是于1967年为CDC 6000系列机器的操作控制台而作的。另外一个早期的全屏编辑器是vi。vi诞生于20世纪70年代,至今,它仍是Unix和Linux的标准编辑器。全屏编辑器对视频终端的销售起到了促进的作用。 文本编辑器在Windows的应用中是一个非常重要的项目,在过去十数年中,微软对windows文本编辑器有多个版本的升级改进,而基于其他的编程环境的文本编辑器也是多如牛毛,今天我们用MFC可视化编译环境做一个简易的文本编辑器。

引言 (2) 1.课程设计目的和意义 (4) 2.详细设计 (4) 2.1需求描述 (4) 2.1.1文件 (4) 2.1.2编辑 (4) 2.1.3应用 (5) 2.1.4帮助 (5) 2.1.5高级 (5) 2.2功能描述 (5) 2.2.1文本编辑区 (5) 2.2.2文件 (7) 2.2.3编辑 (15) 2.2.4应用 (16) 2.2.5帮助 (21) 2.2.6高级 (22) 2.2.7菜单栏 (25) 2.2.7图标 (26) 2.3程序运行说明 (27) 3.课程设计总结 (30) 3.1编程日志 (30) 3.3测试报告 (31) 4.心得体会 (31) 5.参考文献 (31)

文本编辑器源代码

/* A Screen Editer Subsystem */ #define TURBOC #include #include #include #include #include #define BUF_SIZE 32000 #define LINE_LEN 79-2 #define MAX_LINES 24-1 #define KILL_BUF_SIZE 4*LINE_LEN /***********************************************************/ char buf[BUF_SIZE]; char *curloc,*endloc; int scrnx,scrny; char killbuf[KILL_BUF_SIZE]; char *helpline="F1:save F2:load F3:find F4:replace ^K:kill line ^Y:Yank ^Z:qiut"; /*************************************************************/ void edit(char *fname),help(void); void gotoxy(int x,int y),clrline(int y); void edit_clr_col(int x,int y),clrscr(void); void printline(char *p),delete_char(void); void search(void),kill_line(void); void scrolldn(int x,int y); void scrollup(int topx,int topy,int endx,int endy); void upline(void); void downline(void),left(void),right(void); void display_scrn(int x,int y,char *p); void pagedown(void),pageup(void),replace(void); void home(void),gotoend(void),yank(void); int load(char *fname),save(char *fname); void edit_gets(char *str); void draw_border(int,int,int,int,int); /***************************************************/ main(int argc,char *argv[]) { union REGS r; char fname[80]; if(argc<2) {

相关主题
相关文档
最新文档