zoukankan      html  css  js  c++  java
  • 18.QT-QPlainEdit 信号与槽

    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 默认为1
    
    void copyAvailable ( bool yes );
    //选择某串文字时,则触发该信号,并设置yes为true,如果取消选择,也会触发该信号,设置 yes为false
    
    void 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_OBJECT
    
        QPlainTextEdit 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);
    }

    效果: 

     

  • 相关阅读:
    Android官方数据绑定框架DataBinding*
    Application 使用分析*
    Android HandlerThread与IntentService*
    Android中SQLite应用详解*
    Android开发中,那些让您觉得相见恨晚的方法、类或接口*
    巧用ViewPager 打造不一样的广告轮播切换效果*
    Android-Universal-Image-Loader的缓存处理机制与使用 LruCache 缓存图片*
    Android Volley完全解析*
    Android 蓝牙*
    Android自定义View
  • 原文地址:https://www.cnblogs.com/lifexy/p/9003918.html
Copyright © 2011-2022 走看看