一、UI设计
新建项目,主要选项如下图:一个MainWindow,带ui文件。
初步Ui设计
信号与槽函数:将上面的操作行为映射至槽函数来执行操作。
二、代码开发
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QProgressBar> // 进度条
#include <QSpinBox> // 字体大小设置框
#include <QFontComboBox> //下拉字体选择
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QLabel* flabCurFile;
QProgressBar* progressBar;
QSpinBox* spinFontSize;
QFontComboBox * comboFont;
void initUI();
void initSignalSlots();
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_actBold_triggered(bool checked);
void on_textEdit_copyAvailable(bool b);
void on_textEdit_selectionChanged();
void on_spinBoxFontSize_valueChange(int aFontSize);
void on_comboFont_currentIndexChanged(const QString &args1);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMainWindow>
void MainWindow::initUI()
{
flabCurFile = new QLabel;
flabCurFile->setMidLineWidth(150);
flabCurFile->setText("当前文件:");
ui->statusbar->addWidget(flabCurFile);
progressBar = new QProgressBar;
progressBar->setMinimum(5);
progressBar->setMaximum(50);
progressBar->setValue(ui->textEdit->font().pointSize());
ui->statusbar->addWidget(progressBar);
spinFontSize = new QSpinBox;
spinFontSize->setMinimum(5);
spinFontSize->setMaximum(50);
ui->toolBar->addWidget(new QLabel("字体大小"));
ui->toolBar->addWidget(spinFontSize);
comboFont = new QFontComboBox;
ui->toolBar->addWidget(new QLabel("字体"));
ui->toolBar->addWidget(comboFont);
setCentralWidget(ui->textEdit);
}
void MainWindow::initSignalSlots()
{
connect(spinFontSize,
SIGNAL(valueChanged(int)),
this,
SLOT(on_spinBoxFontSize_valueChange(int)));
connect(comboFont,
SIGNAL(currentIndexChanged(const QString&)),
this,
SLOT(on_comboFont_currentIndexChanged(const QString&)));
}
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
initUI();
initSignalSlots();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actBold_triggered(bool checked)
{
QTextCharFormat fmt;
if(checked)
fmt.setFontWeight(QFont::Bold);
else
fmt.setFontWeight(QFont::Normal);
ui->textEdit->mergeCurrentCharFormat(fmt);
}
void MainWindow::on_textEdit_copyAvailable(bool b)
{
ui->actCut->setEnabled(b);
ui->actCopy->setEnabled(b);
ui->actPaste->setEnabled(ui->textEdit->canPaste());
}
void MainWindow::on_textEdit_selectionChanged()
{
QTextCharFormat fmt;
fmt = ui->textEdit->currentCharFormat();
ui->actItalic->setChecked(fmt.fontItalic());
ui->actBold->setChecked(fmt.font().bold());
ui->actUndelline->setChecked(fmt.fontUnderline());
}
void MainWindow::on_spinBoxFontSize_valueChange(int aFontSize)
{
QTextCharFormat fmt;
fmt.setFontPointSize(aFontSize);
ui->textEdit->mergeCurrentCharFormat(fmt);
progressBar->setValue(aFontSize);
}
void MainWindow::on_comboFont_currentIndexChanged(const QString &args1)
{
QTextCharFormat fmt;
fmt.setFontFamily(args1);
ui->textEdit->mergeCurrentCharFormat(fmt);
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
为APP应用添加图标
在工程.pro同级文件夹中放入ico图像,并将文件名添加到.pro中,如下:
RC_ICONS = title.ico
效果演示:(未实现斜体与下划线功能)
工具栏编译不显示图标:https://blog.csdn.net/u013541325/article/details/102491336