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();
}
相关推荐
萌新小白的逆袭27 分钟前
《Maven 核心基础笔记(第一天)》
java·开发语言·spring
苦学编程的谢1 小时前
MyBatis_3
java·开发语言·后端·mybatis
go54631584651 小时前
Python点阵字生成与优化:从基础实现到高级渲染技术
开发语言·人工智能·python·深度学习·分类·数据挖掘
猫头虎2 小时前
2025年02月11日 Go生态洞察:Go 1.24 发布亮点全面剖析
开发语言·后端·python·golang·go·beego·go1.19
程序员编程指南2 小时前
Qt 网络编程进阶:RESTful API 调用
c语言·网络·c++·qt·restful
仰望天空—永强2 小时前
PS 2025【七月最新v26.5】PS铺软件安装|最新版|附带安装文件|详细安装说明|附PS插件
开发语言·图像处理·python·图形渲染·photoshop
寒士obj2 小时前
JVM 内存结构
java·开发语言·jvm
MediaTea2 小时前
Python 库手册:xmlrpc.client 与 xmlrpc.server 模块
开发语言·python
悦悦子a啊2 小时前
Python之--字典
开发语言·python·学习
程序员编程指南2 小时前
Qt XML 与 JSON 数据处理方法
xml·c语言·c++·qt·json