使用Qt控件练习文本编辑窗口的创建。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QProgressBar>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QLabel* m_labFile;
QProgressBar* m_proGressBar;
QLabel* m_labInfo;
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_actionFile_New_triggered();
void on_actionFile_Open_triggered();
void on_actionFile_Save_triggered();
void on_textEdit_copyAvailable(bool b);
void on_textEdit_selectionChanged();
void on_actionFont_Bold_triggered(bool checked);
void on_actionFont_Italic_triggered(bool checked);
void on_actionFont_UnderLine_triggered(bool checked);
void on_fontSize_changed(int fontSize);
void on_font_changed(QFont font);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QActionGroup>
#include <QSpinBox>
#include <QFontComboBox>
#include <QProgressBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QActionGroup* action_group = new QActionGroup(this);
action_group->addAction(ui->actionLang_Chinese);
action_group->addAction(ui->actionLang_English);
action_group->setExclusive(true);
QSpinBox* spinFontSize = new QSpinBox(this);
spinFontSize->setMaximum(50);
spinFontSize->setMinimum(5);
spinFontSize->setValue(ui->textEdit->font().pointSize());
spinFontSize->setMinimumWidth(50);
ui->toolBar->addWidget(spinFontSize);
QFontComboBox* comboFontBox = new QFontComboBox;
comboFontBox->setMinimumWidth(150);
comboFontBox->setFont(ui->textEdit->font());
ui->toolBar->addWidget(comboFontBox);
ui->toolBar->addSeparator();
ui->toolBar->addAction(ui->actionClose);
m_labFile = new QLabel(this);
m_labFile->setMinimumWidth(150);
m_labFile->setText("文件名: ");
ui->statusbar->addWidget(m_labFile);
m_proGressBar = new QProgressBar(this);
m_proGressBar->setMinimum(5);
m_proGressBar->setMaximum(50);
m_proGressBar->setValue(ui->textEdit->font().pointSize());
ui->statusbar->addWidget(m_proGressBar);
m_labInfo = new QLabel("PermanentWidget");
ui->statusbar->addPermanentWidget(m_labInfo);
connect(spinFontSize, &QSpinBox::valueChanged, this, &MainWindow::on_fontSize_changed);
connect(comboFontBox, &QFontComboBox::currentFontChanged, this, &::MainWindow::on_font_changed);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionFile_New_triggered()
{
ui->textEdit->clear();
ui->textEdit->document()->setModified(false);
m_labFile->setText("文件名:新建一个文件");
}
void MainWindow::on_actionFile_Open_triggered()
{
m_labFile->setText("正在打开一个文件");
}
void MainWindow::on_actionFile_Save_triggered()
{
ui->textEdit->document()->setModified(false);
m_labFile->setText("已经保存一个文件");
}
void MainWindow::on_textEdit_copyAvailable(bool b)
{
ui->actionEdit_Copy->setEnabled(b);
ui->actionEdit_Cut->setEnabled(b);
ui->actionEdit_Paste->setEnabled(ui->textEdit->canPaste());
}
void MainWindow::on_textEdit_selectionChanged()
{
QTextCharFormat fmt = ui->textEdit->currentCharFormat();
ui->actionFont_Bold->setChecked(fmt.font().bold());
ui->actionFont_Italic->setChecked(fmt.font().italic());
ui->actionFont_UnderLine->setChecked(fmt.font().underline());
}
void MainWindow::on_actionFont_Bold_triggered(bool checked)
{
QTextCharFormat fmt = ui->textEdit->currentCharFormat();
if(checked)
fmt.setFontWeight(QFont::Bold);
else
fmt.setFontWeight(QFont::Normal);
//fmt.font().setBold(checked);
ui->textEdit->setCurrentCharFormat(fmt);
}
void MainWindow::on_actionFont_Italic_triggered(bool checked)
{
QTextCharFormat fmt = ui->textEdit->currentCharFormat();
// fmt.font().setItalic(checked);
fmt.setFontItalic(checked);
ui->textEdit->setCurrentCharFormat(fmt);
}
void MainWindow::on_actionFont_UnderLine_triggered(bool checked)
{
QTextCharFormat fmt = ui->textEdit->currentCharFormat();
// fmt.font().setUnderline(checked);
fmt.setFontUnderline(checked);
ui->textEdit->setCurrentCharFormat(fmt);
}
void MainWindow::on_fontSize_changed(int fontSize)
{
QTextCharFormat fmt = ui->textEdit->currentCharFormat();
fmt.setFontPointSize(fontSize);
ui->textEdit->setCurrentCharFormat(fmt);
m_proGressBar->setValue(fontSize);
}
void MainWindow::on_font_changed(QFont font)
{
QTextCharFormat fmt = ui->textEdit->currentCharFormat();
fmt.setFont(font);
ui->textEdit->setCurrentCharFormat(fmt);
m_labInfo->setText("字体名称 " + font.family());
}
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}