《Qt5.9 c++开发指南》学习笔记(Qt UI和代码混合编程实现工具栏添加控件,进度条控件使用)1.1

参考书籍:《Qt5.9 c++开发指南》

源代码

先上效果图:

在这里插入图片描述
action创建

什么是action?
使用action可以创建菜单项,工具栏按钮,也可以设置QToolButton按钮的关联action,点击这些action创建的菜单项,按钮就执行action的槽函数。

1.资源文件创建,即等会action要用到的图标图片,点击File->new File or priject然后如下操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.action创建
在这里插入图片描述

3.action与槽函数绑定

在这里插入图片描述

代码

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QFontComboBox>
#include <QLabel>
#include <QMainWindow>
#include <QProgressBar>
#include <QSpinBox>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QString     fCurFileName;//当前文件名
    QLabel      *fLabCurFile;//状态栏里显示当前文件的Label
    QProgressBar    *progressBar1;//状态栏上的进度条

    QSpinBox        *spinFontSize;//   字体大写
    QFontComboBox   *comboFont;//字体名称


    void    updateCurFile(QString aFile);//更新当前文件名,并更新状态栏提示
    void    iniUI(); //程序设计的UI初始化
    void    iniSignalSlots(); //手工关联信号与槽
    void    createNew();

private slots:
    //UI界面设计生成的槽函数
    void on_actFontBold_triggered(bool checked);  //粗体Action
    void on_actFontItalic_triggered(bool checked); //斜体Action
    void on_actFontUnder_triggered(bool checked);   //下划线Action

    void on_actNew_triggered();//新建文件
    void on_actOpen_triggered();//打开文件

    void on_actFont_triggered();//字体选择对话框

    void on_txtEdit_selectionChanged();  //当前选择的文字发生变化,更新粗体、斜体、下划线3个action的checked状态
    void on_txtEdit_copyAvailable(bool b);//有文字可copy时更新cut,copy的Enable状态

    void on_actToolbarLab_triggered(bool checked); //设置工具栏按钮样式
    //  自定义槽函数
    void on_spinBoxFontSize_valueChanged(int aFontSize);//改变字体大小的SpinBox的响应
    void on_comboFont_currentIndexChanged(const QString &arg1);//FontCombobox的响应,选择字体名称

    //void on_actCut_triggered();

private:
    Ui::MainWindow *ui;


};

#endif // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include    <QFile>
#include    <QFileDialog>
#include    <QTextStream>
#include    <QFontDialog>
#include    <QCoreApplication>
#include    <Qlabel>
#include    <QTextCharFormat>

void MainWindow::updateCurFile(QString aFile)
{//更新当前文件名,并更新状态栏提示
    fCurFileName=aFile;
    fLabCurFile->setText("当前文件:"+fCurFileName);
}


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    iniUI();//手工初始化UI

    iniSignalSlots();//信号与槽关联
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::iniUI()
{
//状态栏
    fLabCurFile=new QLabel;  //用于显示当前文件名的标签
    fLabCurFile->setMinimumWidth(150);
    fLabCurFile->setText("当前文件:");
    ui->statusBar->addWidget(fLabCurFile);//添加到状态栏

    progressBar1=new QProgressBar;//状态栏上的进度条
    progressBar1->setMaximumWidth(200);//设置组件最大宽度
    progressBar1->setMinimum(5);
    progressBar1->setMaximum(50);
    progressBar1->setValue(ui->txtEdit->font().pointSize());//初始值
    ui->statusBar->addWidget(progressBar1); //添加到状态栏

//工具栏
    spinFontSize = new QSpinBox;// 工具栏上的文字大小 SpinBox
    spinFontSize->setMinimum(5);
    spinFontSize->setMaximum(50);
    spinFontSize->setValue(ui->txtEdit->font().pointSize());//初始值
    spinFontSize->setMinimumWidth(50);//设置组件最小宽度

    ui->mainToolBar->addWidget(new QLabel("字体大小 ")); //不引用的Label无需定义变量
    ui->mainToolBar->addWidget(spinFontSize); //SpinBox添加到工具栏

    ui->mainToolBar->addSeparator(); //工具栏上增加分隔条
    ui->mainToolBar->addWidget(new QLabel(" 字体 "));
    comboFont = new QFontComboBox;//字体名称ComboBox
    comboFont->setMinimumWidth(150); //设置组件最小宽度
    ui->mainToolBar->addWidget(comboFont);//添加到工具栏

    setCentralWidget(ui->txtEdit); //将txtEdit设置为中心组件,自动填充整个工作区
}

void MainWindow::iniSignalSlots()
{ //信号与槽的关联,当函数带有参数时,必须写明参数的类型
    connect(spinFontSize,SIGNAL(valueChanged(int)),
            this,SLOT(on_spinBoxFontSize_valueChanged(int)));

    connect(comboFont,SIGNAL(currentIndexChanged(const QString &)),
            this,SLOT(on_comboFont_currentIndexChanged(const QString &)));
}

void MainWindow::on_txtEdit_copyAvailable(bool b)
{//有文字可copy时更新cut,copy的Enable状态
    ui->actCut->setEnabled(b); //能否 cut
    ui->actCopy->setEnabled(b);  //能否copy

    ui->actPaste->setEnabled(ui->txtEdit->canPaste()); //能否paste
}

void MainWindow::on_actFont_triggered()
{
    bool    ok;
    QFont font = QFontDialog::getFont(&ok, this);
    if (ok)
        ui->txtEdit->setFont(font);

}

void MainWindow::on_actOpen_triggered()
{
    QString curPath,aFileName;
    curPath=QCoreApplication::applicationDirPath(); //获取应用程序的路径

//调用打开文件对话框打开一个文件
    aFileName=QFileDialog::getOpenFileName(this,tr("打开一个文件"),curPath,
                 "C++程序文件(*.cpp);;H头文件(*.h);;文本文件(*.txt);;所有文件(*.*)");

    if (!aFileName.isEmpty())
    {
        QFile aFile(aFileName);  //以文件方式读出
        if (aFile.open(QIODevice::ReadWrite | QIODevice::Text))
        {
            QTextStream aStream(&aFile); //用文本流读取文件
            while (!aStream.atEnd())
                ui->txtEdit->append(aStream.readLine()); //读取一个文本行
            updateCurFile(aFileName); //更新状态栏显示
        }
        aFile.close();
    }
}

void MainWindow::on_actNew_triggered()
{//新建文件
    ui->txtEdit->clear();
    updateCurFile("");
}

void MainWindow::on_spinBoxFontSize_valueChanged(int aFontSize)
{//改变字体大小的SpinBox的响应
    QTextCharFormat fmt;
    fmt.setFontPointSize(aFontSize); //设置字体大小
    ui->txtEdit->mergeCurrentCharFormat(fmt);
    progressBar1->setValue(aFontSize);
}

void MainWindow::on_comboFont_currentIndexChanged(const QString &arg1)
{//FontCombobox的响应,选择字体名称
    QTextCharFormat fmt;
    fmt.setFontFamily(arg1);//设置字体名称
    ui->txtEdit->mergeCurrentCharFormat(fmt);
}


void MainWindow::on_actToolbarLab_triggered(bool checked)
{
    if (checked)  //显示文字和图标
        ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    else //只显示图标
        ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonIconOnly);
}

void MainWindow::on_actFontBold_triggered(bool checked)
{
    QTextCharFormat fmt; //格式
    fmt=ui->txtEdit->currentCharFormat();//获取当前选择文字的格式

    if (checked) // 相当于调用ui->actFontBold->isChecked();读取Action的check状态
        fmt.setFontWeight(QFont::Bold);
    else
        fmt.setFontWeight(QFont::Normal);

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

void MainWindow::on_actFontItalic_triggered(bool checked)
{
    QTextCharFormat fmt;
    fmt=ui->txtEdit->currentCharFormat();
    fmt.setFontItalic(checked);
    ui->txtEdit->mergeCurrentCharFormat(fmt);
}

void MainWindow::on_actFontUnder_triggered(bool checked)
{
    QTextCharFormat fmt;
    fmt=ui->txtEdit->currentCharFormat();
    fmt.setFontUnderline(checked);
    ui->txtEdit->mergeCurrentCharFormat(fmt);
}


void MainWindow::on_txtEdit_selectionChanged()
{//当前选择的文字发生变化,更新粗体、斜体、下划线3个action的checked状态
    QTextCharFormat fmt;
    fmt=ui->txtEdit->currentCharFormat(); //获取文字的格式

    ui->actFontItalic->setChecked(fmt.fontItalic()); //是否斜体
    ui->actFontBold->setChecked(fmt.font().bold()); //是否粗体
    ui->actFontUnder->setChecked(fmt.fontUnderline()); //是否有下划线
}



MainWindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>512</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <property name="toolButtonStyle">
   <enum>Qt::ToolButtonTextUnderIcon</enum>
  </property>
  <widget class="QWidget" name="centralWidget">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QTextEdit" name="txtEdit"/>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>512</width>
     <height>22</height>
    </rect>
   </property>
   <widget class="QMenu" name="menu">
    <property name="title">
     <string>文件</string>
    </property>
    <addaction name="actNew"/>
    <addaction name="actOpen"/>
    <addaction name="separator"/>
    <addaction name="actClose"/>
   </widget>
   <widget class="QMenu" name="menu_2">
    <property name="title">
     <string>编辑</string>
    </property>
    <addaction name="actCut"/>
    <addaction name="actCopy"/>
    <addaction name="actPaste"/>
    <addaction name="separator"/>
    <addaction name="actClear"/>
   </widget>
   <widget class="QMenu" name="menu_3">
    <property name="title">
     <string>格式</string>
    </property>
    <addaction name="actFontBold"/>
    <addaction name="actFontItalic"/>
    <addaction name="actFontUnder"/>
    <addaction name="separator"/>
    <addaction name="actToolbarLab"/>
   </widget>
   <addaction name="menu"/>
   <addaction name="menu_2"/>
   <addaction name="menu_3"/>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
  <widget class="QToolBar" name="mainToolBar">
   <property name="toolButtonStyle">
    <enum>Qt::ToolButtonTextUnderIcon</enum>
   </property>
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
   <addaction name="actNew"/>
   <addaction name="actOpen"/>
   <addaction name="actClear"/>
   <addaction name="separator"/>
   <addaction name="actCut"/>
   <addaction name="actCopy"/>
   <addaction name="actPaste"/>
   <addaction name="separator"/>
   <addaction name="actFontItalic"/>
   <addaction name="actFontBold"/>
  </widget>
  <action name="actCut">
   <property name="icon">
    <iconset resource="res.qrc">
     <normaloff>:/images/images/cut.bmp</normaloff>:/images/images/cut.bmp</iconset>
   </property>
   <property name="text">
    <string>剪切</string>
   </property>
   <property name="toolTip">
    <string>复制</string>
   </property>
   <property name="shortcut">
    <string>Ctrl+X</string>
   </property>
  </action>
  <action name="actCopy">
   <property name="icon">
    <iconset resource="res.qrc">
     <normaloff>:/images/images/120.bmp</normaloff>:/images/images/120.bmp</iconset>
   </property>
   <property name="text">
    <string>拷贝</string>
   </property>
   <property name="shortcut">
    <string>Ctrl+C</string>
   </property>
  </action>
  <action name="actPaste">
   <property name="icon">
    <iconset resource="res.qrc">
     <normaloff>:/images/images/paste.bmp</normaloff>:/images/images/paste.bmp</iconset>
   </property>
   <property name="text">
    <string>黏贴</string>
   </property>
   <property name="shortcut">
    <string>Ctrl+V</string>
   </property>
  </action>
  <action name="actFontBold">
   <property name="checkable">
    <bool>true</bool>
   </property>
   <property name="icon">
    <iconset resource="res.qrc">
     <normaloff>:/images/images/BLD.BMP</normaloff>:/images/images/BLD.BMP</iconset>
   </property>
   <property name="text">
    <string>粗体</string>
   </property>
  </action>
  <action name="actFontItalic">
   <property name="checkable">
    <bool>true</bool>
   </property>
   <property name="icon">
    <iconset resource="res.qrc">
     <normaloff>:/images/images/ITL.BMP</normaloff>:/images/images/ITL.BMP</iconset>
   </property>
   <property name="text">
    <string>斜体</string>
   </property>
  </action>
  <action name="actFontUnder">
   <property name="checkable">
    <bool>true</bool>
   </property>
   <property name="icon">
    <iconset resource="res.qrc">
     <normaloff>:/images/images/WORDUNDR.BMP</normaloff>:/images/images/WORDUNDR.BMP</iconset>
   </property>
   <property name="text">
    <string>下划线</string>
   </property>
  </action>
  <action name="actClose">
   <property name="icon">
    <iconset resource="res.qrc">
     <normaloff>:/images/images/exit.bmp</normaloff>:/images/images/exit.bmp</iconset>
   </property>
   <property name="text">
    <string>退出</string>
   </property>
  </action>
  <action name="actOpen">
   <property name="icon">
    <iconset resource="res.qrc">
     <normaloff>:/images/images/open3.bmp</normaloff>:/images/images/open3.bmp</iconset>
   </property>
   <property name="text">
    <string>打开...</string>
   </property>
  </action>
  <action name="actClear">
   <property name="icon">
    <iconset resource="res.qrc">
     <normaloff>:/images/images/103.bmp</normaloff>:/images/images/103.bmp</iconset>
   </property>
   <property name="text">
    <string>清除</string>
   </property>
  </action>
  <action name="actFont">
   <property name="icon">
    <iconset resource="res.qrc">
     <normaloff>:/images/images/20.ico</normaloff>:/images/images/20.ico</iconset>
   </property>
   <property name="text">
    <string>字体设置</string>
   </property>
  </action>
  <action name="actNew">
   <property name="icon">
    <iconset resource="res.qrc">
     <normaloff>:/images/images/new2.bmp</normaloff>:/images/images/new2.bmp</iconset>
   </property>
   <property name="text">
    <string>新建</string>
   </property>
  </action>
  <action name="actToolbarLab">
   <property name="checkable">
    <bool>true</bool>
   </property>
   <property name="icon">
    <iconset resource="res.qrc">
     <normaloff>:/images/images/430.bmp</normaloff>:/images/images/430.bmp</iconset>
   </property>
   <property name="text">
    <string>显示工具栏文字标签</string>
   </property>
  </action>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources>
  <include location="res.qrc"/>
 </resources>
 <connections>
  <connection>
   <sender>actPaste</sender>
   <signal>triggered()</signal>
   <receiver>txtEdit</receiver>
   <slot>paste()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>-1</x>
     <y>-1</y>
    </hint>
    <hint type="destinationlabel">
     <x>255</x>
     <y>178</y>
    </hint>
   </hints>
  </connection>
  <connection>
   <sender>actCut</sender>
   <signal>triggered()</signal>
   <receiver>txtEdit</receiver>
   <slot>cut()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>-1</x>
     <y>-1</y>
    </hint>
    <hint type="destinationlabel">
     <x>255</x>
     <y>178</y>
    </hint>
   </hints>
  </connection>
  <connection>
   <sender>actCopy</sender>
   <signal>triggered()</signal>
   <receiver>txtEdit</receiver>
   <slot>copy()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>-1</x>
     <y>-1</y>
    </hint>
    <hint type="destinationlabel">
     <x>255</x>
     <y>178</y>
    </hint>
   </hints>
  </connection>
 </connections>
</ui>

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt 5.9 C++ 开发指南是一本官方提供的源代码资源。Qt 是一套跨平台的应用程序开发框架,可以使用 C++ 进行开发,并且允许开发开发各种类型的应用程序,包括图形用户界面(GUI)应用程序、控制台应用程序和命令行应用程序等。 Qt 5.9 C++ 开发指南的源代码资源包括了一系列示例代码和工具,这些代码示例覆盖了 Qt 框架的主要功能和特性,可以帮助开发者快速上手并了解如何使用 Qt 进行应用程序开发。通过这些示例代码开发者可以学习并掌握 Qt 应用程序的常见开发技巧和最佳实践。 这些源代码资源的使用非常方便,开发者只需要下载并导入到自己的开发环境中即可开始学习使用。源代码中的注释和说明也非常详细,开发者可以根据自己的需要进行修改和扩展,以便更好地满足自己的开发需求。 在学习使用 Qt 5.9 C++ 开发指南的源代码资源时,开发者可以通过阅读代码和运行示例程序来理解和掌握 Qt 框架的各项功能和特性。开发者还可以根据自己的需求选择性地学习和探索,以便更好地使用 Qt 进行开发。值得一提的是,Qt 提供了丰富的文档和社区支持,开发者可以在学习过程中通过阅读文档和参与社区讨论来获取更多帮助和指导。 总之,Qt 5.9 C++ 开发指南的源代码资源是学习和掌握 Qt 开发的重要资料,通过深入理解和实践这些源代码开发者可以在自己的项目中更高效地应用 Qt 框架,开发出高质量的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

x县豆瓣酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值