Qt MainWindow简单例子(文本编辑)

使用Qt控件练习文本编辑窗口的创建。

cpp 复制代码
#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
cpp 复制代码
#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());
}
cpp 复制代码
#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
相关推荐
wdfk_prog1 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
闻道且行之3 小时前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr
许彰午4 小时前
95_Python内存管理与垃圾回收
开发语言·python
多加点辣也没关系5 小时前
JavaScript|第13章:原始类型的方法
开发语言·javascript·ecmascript
এ慕ོ冬℘゜5 小时前
深入理解 JavaScript 事件体系:Window、鼠标与键盘事件详解
开发语言·javascript·okhttp
chouchuang7 小时前
day-030-综合练习-笔记管理器
开发语言·笔记·python
云空7 小时前
《Three.js 3D实例大全》
开发语言·javascript·3d·three.js
techdashen7 小时前
Go 1.26 新增 `bytes.Buffer.Peek`:只看数据,不移动读取位置
开发语言·后端·golang
C137的本贾尼8 小时前
第七篇:消息队列(MQ)——就是个带存储的异步通信管道
java·开发语言·中间件
从零开始的代码生活_9 小时前
C++ list 原理与实践:双向链表、迭代器与简化实现
开发语言·c++·后端·学习·算法·链表·list