文本编辑窗口
TextEditor继承了QTextEdit,主要实现文本编辑和文本格式设置。保存文本信息时直接用的html字符串形式保存,可以同时保存文本的格式。
class TextEditor:public QTextEdit
{
Q_OBJECT
public:
TextEditor(QWidget *parent = NULL);
~TextEditor();
void SaveSettings();
protected:
void ReadSettings();
void contextMenuEvent ( QContextMenuEvent * event );
private slots:
void SettingBackColorSlot();
void SettingTextColorSlot();
void SettingTextFontSlot();
};
TextEditor::TextEditor( QWidget *parent /*= NULL*/ ):QTextEdit(parent)
{
ReadSettings();
}
TextEditor::~TextEditor()
{
}
void TextEditor::contextMenuEvent( QContextMenuEvent * event )
{
QMenu *pMenu = createStandardContextMenu();
pMenu->addSeparator();
QTextCursor cursor = this->textCursor();
QString seletedText = cursor.selectedText();
if (!seletedText.isEmpty()) //选中文本才可以设置文本样式
{
QMenu *pSubMenu = new QMenu(tr("设置"),pMenu);
pMenu->addMenu(pSubMenu);
QAction *pFontAct = new QAction(tr("字体"),pSubMenu);
QAction *pTextColorAct = new QAction(tr("字体颜色"),pSubMenu);
QAction *pBackColorAct = new QAction(tr("背景色"),pSubMenu);
pSubMenu->addAction(pFontAct);
pSubMenu->addAction(pTextColorAct);
pSubMenu->addAction(pBackColorAct);
connect(pFontAct,SIGNAL(triggered ()),this,SLOT(SettingTextFontSlot()));
connect(pTextColorAct,SIGNAL(triggered ()),this,SLOT(SettingTextColorSlot()));
connect(pBackColorAct,SIGNAL(triggered ()),this,SLOT(SettingBackColorSlot()));
}
pMenu->exec(event->globalPos());
delete pMenu;
}
//设置文本背景色
void TextEditor::SettingBackColorSlot()
{
QColor color = QColorDialog::getColor(Qt::white, this, "Select Color", QColorDialog::DontUseNativeDialog);
if(color.isValid())
{
this->setTextBackgroundColor(color);
}
}
//设置文本颜色
void TextEditor::SettingTextColorSlot()
{
QColor color = QColorDialog::getColor(Qt::black, this, "Select Color", QColorDialog::DontUseNativeDialog);
if(color.isValid())
{
this->setTextColor(color);
}
}
//设置文本字体
void TextEditor::SettingTextFontSlot()
{
bool ok;
QFont font = QFontDialog::getFont(&ok, this);
if (ok)
{
QTextCursor cur = this->textCursor();
QString sltStr = cur.selectedText();
this->cut();
QTextCharFormat fmtText;
fmtText.setFont(font);
cur.insertText(sltStr,fmtText);
}
}
//退出前保存文本信息
void TextEditor::SaveSettings()
{
QSettings TextSettings("Mysoft","TextData");
QString html = this->toHtml();
TextSettings.setValue("text",html);
}
//启动时读取信息
void TextEditor::ReadSettings()
{
QSettings TextSettings("Mysoft","TextData");
QString html = TextSettings.value("text").toString();
this->setHtml(html);
}
程序主窗口
class TextEdit : public QMainWindow
{
Q_OBJECT
public:
TextEdit(QWidget *parent = 0, Qt::WFlags flags = 0);
~TextEdit();
protected:
void closeEvent ( QCloseEvent * event ) ;
void ReadSettings();
private:
TextEditor *m_pCentralWidget;
};
TextEdit::TextEdit(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
m_pCentralWidget = new TextEditor(this);
this->setCentralWidget(m_pCentralWidget);
ReadSettings();
}
TextEdit::~TextEdit()
{
}
void TextEdit::closeEvent( QCloseEvent * event )
{
QSettings dialogSettings("Mysoft","dialogData"); //保存窗口位置和大小
dialogSettings.setValue("Rect",this->rect());
QPoint pos = this->pos();
dialogSettings.setValue("positionX",this->pos().x());
dialogSettings.setValue("positionY",this->pos().y());
m_pCentralWidget->SaveSettings();
}
void TextEdit::ReadSettings()
{
QSettings dialogSettings("Mysoft","dialogData"); //读取窗口位置和大小
dialogSettings.setValue("Rect",this->rect());
dialogSettings.setValue("position",this->pos());
QRect rect = dialogSettings.value("Rect").value<QRect>();
this->setGeometry(rect);
int posX = dialogSettings.value("positionX").toInt();
int posY = dialogSettings.value("positionY").toInt();
this->move(QPoint(posX,posY));
}
参考:
https://www.yuque.com/docs/share/b62d0856-2c63-42a3-b9f9-04d5579a380b