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();
}
相关推荐
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端
norlan_jame5 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone5 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ4022054965 天前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django
遥遥江上月5 天前
Node.js + Stagehand + Python 部署
开发语言·python·node.js
m0_531237175 天前
C语言-数组练习进阶
c语言·开发语言·算法
Railshiqian5 天前
给android源码下的模拟器添加两个后排屏的修改
android·开发语言·javascript
雪人不是菜鸡5 天前
简单工厂模式
开发语言·算法·c#