QPlainEdit编辑功能
Public Slots
void appendHtml ( const QString & html ) void appendPlainText ( const QString & text ) void centerCursor () void clear () void copy () void cut () void insertPlainText ( const QString & text ) void paste () void redo () void selectAll () void setPlainText ( const QString & text ) void undo ()
Signals
void blockCountChanged ( int newBlockCount ); //每当按下回车或者删除回车(更新字符块),则newBlockCount计数,并触发该信号, newBlockCount 默认为1void copyAvailable ( bool yes ); //选择某串文字时,则触发该信号,并设置yes为true,如果取消选择,也会触发该信号,设置 yes为falsevoid cursorPositionChanged () ////每当光标的位置发生变化时,触发该信号void redoAvailable ( bool available ); //当文本框为空,则会触发该信号,并设置available为false,因为该文本框没有数据,所以无法重做 //当用户向空文本框输入数据时,同样也会触发该信号,设置available为true,表示可以实现重做void selectionChanged (); //当鼠标点击文本框时,触发该信号void textChanged (); //每当文档的内容发生变化时,则触发该信号,可以用来判断输入的字符是什么void undoAvailable ( bool available ); //当用户无法撤销时,便会触发该信号,并设置available为false //当用户修改/写入文本框内容,便会触发该信号,并设置available为true,表示可以撤销
示例代码
Widget.h:
#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPlainTextEdit> #include <QPushButton> #include <QDebug>class Widget : public QWidget {Q_OBJECTQPlainTextEdit edit;QPushButton* Undo;QPushButton* Redo;QPushButton* Cut;QPushButton* Copy;QPushButton* Paste;QPushButton* all;QPushButton* clear;private slots:void oncopyAvailable ( bool yes );void onredoAvailable ( bool available );void onundoAvailable ( bool available ); public:explicit Widget(QWidget *parent = 0); };#endif
Widget.c:
#include "Widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),edit(this) {edit.setGeometry(0,0,280,300);Undo= new QPushButton("重做",this);Redo= new QPushButton("撤销",this);Cut= new QPushButton("剪切",this);Copy= new QPushButton("复制",this);Paste= new QPushButton("拷贝",this);all= new QPushButton("全选",this);clear= new QPushButton("删除",this);Undo->setGeometry(290,0,100,30);Redo->setGeometry(290,40,100,30);Cut->setGeometry(290,80,100,30);Copy->setGeometry(290,120,100,30);Paste->setGeometry(290,160,100,30);all->setGeometry(290,200,100,30);clear->setGeometry(290,240,100,30);Undo->setEnabled(false);Redo->setEnabled(false);Cut->setEnabled(false);Copy->setEnabled(false);/*设置按键与文本框槽的关系*/connect(Undo, SIGNAL(clicked()) , &edit ,SLOT(undo()));connect(Redo, SIGNAL(clicked()) , &edit ,SLOT(redo()));connect(Cut, SIGNAL(clicked()) , &edit ,SLOT(cut()));connect(Copy, SIGNAL(clicked()) , &edit ,SLOT(copy()));connect(Paste, SIGNAL(clicked()) , &edit ,SLOT(paste()));connect(all, SIGNAL(clicked()) , &edit ,SLOT(selectAll()));connect(clear, SIGNAL(clicked()) , &edit ,SLOT(clear()));/*设置文本框信号与槽函数的关系*/connect(&edit, SIGNAL(copyAvailable(bool)) , this ,SLOT(oncopyAvailable(bool)));connect(&edit, SIGNAL(redoAvailable(bool)) , this ,SLOT(onredoAvailable(bool)));connect(&edit, SIGNAL(undoAvailable(bool)) , this ,SLOT(onundoAvailable(bool)));connect(&edit, SIGNAL(selectionChanged()) , this ,SLOT(onselectionChanged()));}void Widget::oncopyAvailable ( bool yes ) {Cut->setEnabled(yes);Copy->setEnabled(yes); }void Widget::onredoAvailable( bool available ) {Redo->setEnabled(available); }void Widget::onundoAvailable ( bool available ) {Undo->setEnabled(available); }
效果: