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

发布于:2025-03-17 ⋅ 阅读:(12) ⋅ 点赞:(0)

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