zoukankan      html  css  js  c++  java
  • QTextEdit中选中文本修改字体与颜色,全部文本修改字体与颜色(设置调色板的前景色、背景色、文字颜色以及基色)

    ~~~~我的生活,我的点点滴滴!!

    当然以下内容都可以通过设置样式来达到目的,但是下面不使用这样的方法

    先来看张图,理解此图基本就能实现上面所要达到的目的了

    Widget::Widget(QWidget *parent)

        : QWidget(parent), ui(new Ui::Widget) {

        ui->setupUi(this);

        connect(ui->button, SIGNAL(clicked()), this, SLOT(setColor()));

        QPalette p = palette();

        p.setColor(QPalette::Text, QColor(0, 255, 0));

        setPalette(p); // 注意这里, 修改了widget的调色板, 子窗口ui->lineEdit的颜色变化.

    }

    Widget::~Widget() {

        delete ui;

    }

    void Widget::setColor() {

        QPalette palette = ui->lineEdit->palette();

        const QColor &color = QColorDialog::getColor(palette.color(QPalette::Background), this);

        if (color.isValid()) {

            palette.setColor(QPalette::Highlight, color);

            ui->lineEdit->setPalette(palette);

        }

    }

    palette.setColor(QPalette::Highlight, color);

    此处:

    QPalette::Highlight // 被选中后文字的背景色.

    QPalette::HighlightText // 被选中后文字的前景色.

    QPalette::Text // 文字的前景色

    QPalette::Base // QTextEdit的背景色, 默认是白色的.

    Role: Qt中会有一组数据, 当取得这些数据时, 使用同样的方法去获取, 为了指明是取得哪种数据, 所以就定义了Role这种概念, 来指明要获取的数据的类型, 例如在View中, 如有显示的文字, 图标, 真正有用的数据(可能没有显示出来, 而是在内部存储着), 取得这些数据都是用同一个方法data(), 通过指明数据的角色来获得.

    所有Qt窗口部件都拥有一个QPalette, 并使用它绘制自己. 应用程序还有一个调色板, 通过QApplication::palette()来获得. 修改一个窗口部件的调色板, 只影响这个窗口部件以及子窗口部件(不包含子窗口, 如只是以他作为父对象来管理内存, 而不在他里面显示), 而修改应用程序的调色板, 会影响到该应用程序的所有窗口部件

    void Widget::slot_updateFont()
    {
        bool ok;
        QFont font = QFontDialog::getFont(&ok, m_curfont, this);
        if( ok )
        {
            m_curfont = font;
            setInsertTextFont(font);
            //ui->m_textwrite->setFont(m_curfont);
            //ui->m_spbfont->setValue(m_curfont.pointSize());
        }
    }


    void Widget::slot_updateColor()
    {
       QColor color = QColorDialog::getColor(m_curcolor,this);


       if( color.isValid() )
       {
           m_curcolor = color;
           QPalette palette = ui->m_textwrite->palette();
           palette.setColor(QPalette::Text, m_curcolor);
           ui->m_textwrite->setPalette(palette);
       }
    }


    void Widget::slot_updateFontSize(int value)
    {
        m_curfontsize = value;
        m_curfont.setPointSize(m_curfontsize);
        ui->m_textwrite->setFont(m_curfont);
    }

    void Widget::displayData(const QString &str)
    {
        QFont timeFont(QFont( "AR PL UKai CN,10,-1,5,50,0,0,0,0,0" ));
        QColor timeColor (0,0,255);
        QTime curTime = QTime::currentTime();


        //设置时间颜色与字体
        setInsertTextFont(timeFont);
        setInsertTextColor(timeColor);
        ui->m_textdisplay->append(curTime.toString());


        //设置发送内容
        setInsertTextFont(m_curfont);
        setInsertTextColor(m_curcolor);
        ui->m_textdisplay->append(str);
    }

    void Widget::setInsertTextFont(const QFont &font)
    {
        QTextCharFormat fmt;//文本字符格式
        fmt.setFont(font);//字体
        QTextCursor cursor = ui->m_textdisplay->textCursor();//获取文本光标
        cursor.mergeCharFormat(fmt);//光标后的文字就用该格式显示
        ui->m_textdisplay->mergeCurrentCharFormat(fmt);//textEdit使用当前的字符格式
    }


    void Widget::setInsertTextColor(const QColor &color)
    {
        QTextCharFormat fmt;//文本字符格式
        fmt.setForeground(color);// 前景色(即字体色)设为color色
        QTextCursor cursor = ui->m_textdisplay->textCursor();//获取文本光标
        cursor.mergeCharFormat(fmt);//光标后的文字就用该格式显示
        ui->m_textdisplay->mergeCurrentCharFormat(fmt);//textEdit使用当前的字符格式
    }

    对于上面的代码,我为什么没有用QTextEdit里setTextColor这个函数接口了,是因为这个函数是针对当前选中的,从当前光标位置开始往后改变的

    http://blog.csdn.net/ac_huang/article/details/23833127

  • 相关阅读:
    iphone:URL initWithString 返回为空
    android:unable to instantiate activity componentinfo
    android:进度条
    android:spinner
    android:DDMS查看Threads
    android:ListView:convertView.setTag()来设置数据
    iphone:使用UIImagePickerController从IPhone照片库或照相机获取图像
    android:ListView中的getView原理
    android 从assets和res中读取文件
    android:menu.xml
  • 原文地址:https://www.cnblogs.com/findumars/p/5641867.html
Copyright © 2011-2022 走看看