qt1.4简单写字板实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt1.4简单写字板实现相关的知识,希望对你有一定的参考价值。

1设计目标:

技术图片
2创建项目、添加资源
技术图片
技术图片
技术图片
技术图片
技术图片
技术图片
技术图片
3设计Action
QAction是一个非常实用的类,在界面设计时,可创建Action,并完成trigger()信号的槽函数。
设计Action的功能:可以创建菜单栏选项、工具栏按钮、设置为QToolButton按钮的关联Action,当点击这些按钮时就会执行Action的槽函数。

1、添加Action
技术图片
技术图片
技术图片
技术图片
2设计菜单栏
技术图片
3添加一些无法其他组件
例如:你需要在工具栏中添加Spinbox用于设置字体大小、FontcomboBox来选择字体,在状态栏中添加Lable、ProgreeBar和获取系统时间并动态显示在窗口状态栏,但是窗体组件是拒绝添加的,面对这种情况,我们需要编写相应代码来完成啦。

.h

#include <QLabel>
#include <QProgressBar>
#include <QSpinBox>
#include <QFontComboBox>
private slots:
    void timeUpdate();
private:
    Ui::MainWindow *ui;
    //工具栏添加组件
    QSpinBox *spinbox;
    QFontComboBox *Fontbox;
    //状态栏添加组件
    QLabel *label;
QProgressBar *progressBox;
QLabel  *currentTimeLabel;

.c

void MainWindow::Init()
 {
     //工具栏添加组件
//     QSpinBox *spinbox;
//     QFontComboBox *Fontbox;
     spinbox=new QSpinBox();
     spinbox->setMinimum(8);
     spinbox->setMaximum(50);
     spinbox->setValue(ui->textEdit->font().pointSize());
     ui->mainToolBar->addWidget(new QLabel("字体大小"));
     ui->mainToolBar->addWidget(spinbox);//spinbox添加到工具栏

     ui->mainToolBar->addSeparator();//添加分隔栏

     ui->mainToolBar->addWidget(new QLabel("字体"));
     Fontbox=new QFontComboBox;
     Fontbox->setMinimumWidth(150);
     ui->mainToolBar->addWidget(Fontbox);//Fontbox添加到工具栏

     setCentralWidget(ui->textEdit);

     //状态栏添加组件
//     QLabel *label;
//     QProgressBar *progressBox;
     label = new QLabel;
     label->setMidLineWidth(150);
     label->setText("当前文件:");
     ui->statusBar->addWidget(label);//label添加到状态栏

     progressBox = new QProgressBar;
     progressBox->setMinimum(5);
     progressBox->setMaximum(50);
     progressBox->setMinimumWidth(200);
     progressBox->setValue(ui->textEdit->font().pointSize());
     ui->statusBar->addWidget(progressBox);//progressBox添加到状态栏
//获取系统时间并动态显示在窗口状态栏
    currentTimeLabel=new QLabel;
     QTimer *timer=new QTimer(this);
     timer->start(1000); // 每次发射timeout信号时间间隔为1秒
     connect(timer,SIGNAL(timeout()),this,SLOT(timeUpdate()));

 }

槽函数:

void MainWindow::timeUpdate()
 {
    QDateTime CurrentTime=QDateTime::currentDateTime();
    QString Timestr=CurrentTime.toString(" yyyy年-MM月-dd日 hh:mm:ss "); //设置显示的格式
    currentTimeLabel->setText(Timestr);

   // ui->statusBar->addWidget(currentTimeLabel);//生成在状态栏的左端
    ui->statusBar->addPermanentWidget(currentTimeLabel);//生成在状态栏的最右端

 }
 }

要在构造函数中调用Init函数。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Init();

}

运行效果:
技术图片
4Action功能实现
编辑功能Action功能实现:
技术图片
其他Action功能实现:
技术图片

void MainWindow::on_actBold_triggered(bool checked)
{
   QTextCharFormat fmt;
   fmt=ui->textEdit->currentCharFormat();
   if(checked)
   {
       fmt.setFontWeight(QFont::Bold);
   }
   else {
       fmt.setFontWeight(QFont::Normal);

   }
   ui->textEdit->mergeCurrentCharFormat(fmt);
}

void MainWindow::on_actItalic_triggered(bool checked)
{
    Q_UNUSED(checked);
    QTextCharFormat fmt;

    if (ui->actItalic->isChecked())
       fmt.setFontItalic(true);
    else
       fmt.setFontItalic(false);

    ui->textEdit->mergeCurrentCharFormat(fmt);
}

void MainWindow::on_actUnline_triggered(bool checked)
{
    Q_UNUSED(checked);
    QTextCharFormat fmt;

    if (ui->actUnline->isChecked())
       fmt.setFontUnderline(true);
    else
       fmt.setFontUnderline(false);

    ui->textEdit->mergeCurrentCharFormat(fmt);
}

5代码创建的组件信号与槽实现
首先确定编写响应代码:
SpinBox信号:
void valueChanged(int i)

FontComboBox信号:

void    valueChanged(int i) 

在void MainWindow::Init()中添加信号与槽的连接
//字体与大小信号与槽
connect(spinbox,SIGNAL(valueChanged(int)),this,SLOT(SpinBox_Valuechage(int)));
    connect(Fontbox,SIGNAL(currentIndexChanged(const QString &)),this,SLOT(ComboFont_currentIndexchange(const QString &)));
在.cpp中添加槽函数的实现

void MainWindow::SpinBox_Valuechage(int SBoxFontSize)
{
    qDebug()<<"11";
   QTextCharFormat format;
   format.setFontPointSize(SBoxFontSize);
   ui->textEdit->mergeCurrentCharFormat(format);
   progressBox->setValue(SBoxFontSize);
}
//改变字体格式
void MainWindow::ComboFont_currentIndexchange(const QString &arg1)
{
    QTextCharFormat format;
    format.setFontFamily(arg1);
    ui->textEdit->mergeCurrentCharFormat(format);
}

运行效果:
技术图片
6在Init函数中添加下面一行实现
技术图片 ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//显示文字和图标
7为应用程序添加图标
将图标文件复制到项目文件目录下,并在.pro文件中添加RC_ICONS =name.ico。
name是图片文件名,包括后缀必须是.ico的图片
技术图片
技术图片
8文件操作会在后面说。

以上是关于qt1.4简单写字板实现的主要内容,如果未能解决你的问题,请参考以下文章

基于PyTorch实现MNIST手写字识别

软帝学院教你用Java实现写字板功能!

简单快递查询接口API插件下载和安装说明

基于java的记事本写字板的设计(JAVA CS窗体版)

canvas绘制线条&canvas实现写字板功能

golang代码片段(摘抄)