【实例】Qt之⽂本编辑(⼀)
Qt之⽂本编辑(⼀)
⽂档名称Qt之⽂本编辑(⼀)
创建时间2012-9-12
修改时间2012-9-12
创建⼈Baifx
简介(收获)设置字体字号、⽂本排序对齐
⼀、设置字体、字号等格式属性。
【应⽤场景描述】在编辑框中输⼊⼀段⽂字,⽤⿏标选取⽂字,修改⼯具栏上的字体、字号⼤⼩、加粗、斜体等属性,选取的⽂字即发⽣相应的变化。
【基本概念】在编写包含格式设置的⽂本编辑程序时,经常⽤到的Qt类有:QTextEdit、QTextDocument、QTextCharFormat、QTextCursor、QTextBlock、QTextList、QTextFrame、QTextTa
ble、QTextBlockFormat、QTextListFormat、QTextFrameFormat、QTextTableFormat等。刚看到如此多的相关类可能会感到有些混乱,但只要弄清了它们之间的关系,运⽤起来就会⾮常⽅便,Qt已经为⽤户完成了⼏乎所有与编辑有关的具体⼯作,我们所要做的就是运⽤合适的类,调⽤合适的函数接⼝。
⾸先,任何⼀个⽂本编辑器的程序都要⽤到QTextEdit作为输⼊⽂本的容器,在它⾥⾯输⼊的可编辑⽂本由QTextDocument作为载体,⽽QTextBlock、QTextList、QTextFrame等则⽤来表⽰QTextDocument的元素,也可理解为QTextDocument的不同表现形式,可能为字符串、段落、列表、表格或是图⽚等。每种元素都有⾃⼰的格式,这些格式则⽤QTextCharFormat、QTextBlockFormat、QTextListFormat、QTextFrameFormat等类来描述与实现。例如,QTextBlockFormat类对应于QTextBlock类,QTextBlock类⽤于表⽰⼀块⽂本,⼀般可以理解为⼀个段落,但并不只指段落,QTextBlockFormat类则⽤于表⽰这⼀块⽂本的格式,如缩进值、与四边的边距等。各类之间的划分与关系可⽤下图进⾏描述:
从上图可知,QTextCursor类是⼀个⾮常重要也经常会⽤到的类,它⽤于表⽰编辑⽂本中的光标。这个类提供了对QTextDocument ⽂档的修改接⼝,所有对⽂档格式的修改,说到底都与光标有关,如改变字符的格式,指的是改变光标处字符的格式;改变段落的格式,指的是改变光标所在段落的格式,因此,QTextCursor类在⽂档编辑类程序中有着重要的作⽤,所有对QTextDocument的修改能够通过QTe
xtCursor类实现。
【继承关系】
【实例】
fontset.h代码:
class FontSet : public QMainWindow
{
Q_OBJECT
public:
FontSet(QWidget *parent = 0, Qt::WFlags flags = 0);
~FontSet();
protected slots:
void slotFont( QString f );
void slotSize( QString num );
void slotBold();
void slotItalic();
void slotUnder();
void slotColor();
void slotCurrentFormatChanged( const QTextCharFormat & fmt );
private:
void mergeFormat( QTextCharFormat fmt );
private:
QLabel * pLabel1;
QLabel * pLabel2;
QFontComboBox * pFontBox;
QComboBox * pSizeBox;
QToolButton * pBoldBtn;
QToolButton * pItalicBtn;
QToolButton * pUnderBtn;
QToolButton * pColorBtn;
QTextEdit * pText;
};
fontset.cpp代码:
FontSet::FontSet(QWidget *parent, Qt::WFlags flags)
:
QMainWindow(parent, flags)
{
setWindowTitle( tr( "Font" ) );
pText = new QTextEdit( tr( "ajglkajdkgnakjfdsklaj" ), this );
setCentralWidget( pText );
QToolBar * pToolBar = addToolBar( "Font" );
//字体
pLabel1 = new QLabel( tr( "ZiTi:" ) );
pFontBox = new QFontComboBox();
pFontBox->setFontFilters( QFontComboBox::ScalableFonts );      pToolBar->addWidget( pLabel1 );
pToolBar->addWidget( pFontBox );
/
/字号
pLabel2 = new QLabel( tr( "ZiHao:" ) );
pSizeBox = new QComboBox();
pToolBar->addWidget( pLabel2 );
pToolBar->addWidget( pSizeBox );
fontweight属性boldQFontDatabase db;
foreach( int nSize, db.standardSizes() )
pSizeBox->addItem( QString::number( nSize ) );
pToolBar->addSeparator();
//加粗、斜体、下划线、颜⾊
pBoldBtn = new QToolButton();
pBoldBtn->setIcon( QIcon( ".//Resources//bold.png" ) );
pBoldBtn->setCheckable( true );
pToolBar->addWidget( pBoldBtn );
pItalicBtn = new QToolButton();
pItalicBtn->setIcon( QIcon( ".//Resources//italic.png" ) );
pItalicBtn->setCheckable( true );
pToolBar->addWidget( pItalicBtn );
pUnderBtn = new QToolButton();
pUnderBtn->setIcon( QIcon( ".//Resources//underline.png" ) );      pUnderBtn->setCheckable( true );
pToolBar->addWidget( pUnderBtn );
pToolBar->addSeparator();
pColorBtn = new QToolButton();
pColorBtn->setIcon( QIcon( ".//Resources//color.png" ) );
pToolBar->addWidget( pColorBtn );
//连接信号与槽函数
connect( pFontBox, SIGNAL( activated( QString ) ), this, SLOT( slotFont( QString ) ) );
connect( pSizeBox, SIGNAL( activated( QString ) ), this, SLOT( slotSize( QString ) ) );
connect( pBoldBtn, SIGNAL( clicked() ), this, SLOT( slotBold() ) );
connect( pItalicBtn, SIGNAL( clicked() ), this, SLOT( slotItalic() ) );
connect( pUnderBtn, SIGNAL( clicked() ), this, SLOT( slotUnder() ) );
connect( pColorBtn, SIGNAL( clicked() ), this, SLOT( slotColor() ) );
connect( pText, SIGNAL( currentCharFormatChanged( const QTextCharFormat & ) ), this, SLOT( slotCurrentFormatChanged( const QTextCharFormat& ) ) );
}
FontSet::~FontSet()
{
}
void FontSet::slotFont( QString f )
{
QTextCharFormat fmt;
fmt.setFontFamily( f );
mergeFormat( fmt );
}
void FontSet::slotSize( QString num )
{
QTextCharFormat fmt;
fmt.setFontPointSize( Float() );
mergeFormat( fmt );
}
void FontSet::slotBold()
{
QTextCharFormat fmt;
fmt.setFontWeight( pBoldBtn->isChecked() ? QFont::Bold : QFont::Normal );      mergeFormat( fmt );
//pText->mergeCurrentCharFormat( fmt );
}
void FontSet::slotItalic()
{
QTextCharFormat fmt;
fmt.setFontItalic( pItalicBtn->isChecked() );
mergeFormat( fmt );
}
void FontSet::slotUnder()
{
QTextCharFormat fmt;
fmt.setFontUnderline( pUnderBtn->isChecked() );
mergeFormat( fmt );
}
void FontSet::slotColor()
{
QColor color = QColorDialog::getColor( Qt::red, this );
if ( color.isValid() )
{
QTextCharFormat fmt;
fmt.setForeground( color );

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。