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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM