当前位置: 首页 > news >正文

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

使用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();
}

相关文章:

  • generallseteter插件生成内容和数据库不一致
  • 基于javaweb的SpringBoot博客商城管理系统设计与实现(源码+文档+部署讲解)
  • dart学习记录2
  • 基于STM32计时秒表设计Proteus仿真+程序+设计报告+原理图PCB+讲解视频
  • python中有几种作用域
  • 传输层自学
  • 配置单区域OSPF实验和报文抓包和分析
  • 51单片机的工作方式
  • 从模型到应用:大语言模型生态系统完全指南
  • 1.Windows+vscode+cline+MCP配置
  • HarmonyOS NEXT开发进阶(十三):网络请求封装
  • 目标:掌握无位置传感器(FOC)控制PMSM的设计与实现
  • 【go】Go 语言中 errors.Is 和 errors.As 的区别
  • RxSwift 学习笔记第三篇之RxSwift的Observer
  • WIN11开发环境变量记录
  • pyjail逃逸姿势
  • 计算机四级 - 数据库原理 - 第3章 「关系数据库系统概述」
  • React(二):JSX语法解析+综合案例
  • Java 大视界 -- Java 大数据在智慧交通自动驾驶仿真与测试数据处理中的应用(136)
  • 一次Linux下 .net 调试经历
  • 青海省林业和草原局副局长旦增主动投案,正接受审查调查
  • 马上评丨又见酒店坐地起价,“老毛病”不能惯着
  • 自称“最美”通缉犯出狱当主播?央广网:三观怎能跟着“五官”跑
  • 文化润疆|让新疆青少年成为“小小博物家”
  • 诗词文赋俱当歌,听一听古诗词中的音乐性
  • 央行副行长谈美债和美元波动:单一市场、单一资产的变动,对外储影响总体有限