QT 系统学习 day03 了解各种控件,文件操作,消息框,windows应用界面的 生成菜单栏, 状态栏,中心部件,工具栏,

news2024/11/14 4:08:38

1. 控件, 旋钮 ,进度条, 我也不知道叫啥, 

 

相关的代码;

首先是函数

1.旋钮函数  (槽函数都有说明)(Dial)

 ui->dial->setRange(0,100);//设置旋钮的范围
    ui->dial->setValue(0);//设置旋钮目标的值

 2. horizontalSlider  控件的函数 ()

 ui->horizontalSlider->setRange(0,100);//设置范围
    ui->horizontalSlider->setValue(0);

 3.  lcdNumber  控件的函数

   ui->lcdNumber->display(1);//设置为1
    ui->lcdNumber_2->display(2);//设置为 2

4. progressBar  控件的函数

 ui->progressBar->setRange(0,100);
    ui->progressBar->setValue(0);

我写的小程序, Dial 值的改变 控制   progressBar   , progressBar  值的改变控制 horizontalSlider 

代码:

ui->dial->setRange(0,100);//设置范围
    ui->dial->setValue(0);//设置目标的值

    ui->horizontalSlider->setRange(0,100);//设置范围
    ui->horizontalSlider->setValue(0);

    ui->lcdNumber->display(1);//设置为1
    ui->lcdNumber_2->display(2);//设置为 2

    ui->progressBar->setRange(0,100);
    ui->progressBar->setValue(0);

    connect(ui->dial,SIGNAL(valueChanged(int)),ui->horizontalSlider,SLOT(setValue(int)));
    connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->progressBar,SLOT(setValue(int)));

2.对话框 (  Dialog  )  (非模态)

有哪些:

1. 颜色对话框

2.文字(字体大小,类型)对话框

3.文件对话框

4. 警告消息对话框 (warning)

5.提问消息对话框 (question )

6.选择信息对话框 (information )

7. 警告消息对话框 (critical)

8.关于消息对话框 (about )

9.输入消息对话框 ( getText)

10. 多行消息输入对话框 (getMultoLine )

11. 固定选项的消息选择对话框 (getLtem)

12.整数输入对话框 (getint)

13.浮点型数据输入对话框 (getDouble)


1. 颜色对话框

代码:


#include <QColorDialog> /*** 颜色对话框 ***/
void Widget::slot_pushButton_color()
{
    ui->lineEdit->setAutoFillBackground(true); /*** 设置自动背景颜色填充 ***/
    /**** 获取 QLineEdit 的画板颜色 ****/
    QPalette palette = ui->lineEdit->palette();
    QColor color = palette.color(QPalette::Base); /*** 获取背景颜色 ***/

    color = QColorDialog::getColor(color); /*获取颜色对话框返回的 QColor */

    palette.setColor(QPalette::Base,color);     //QPalette::Base背景颜色
    ui->lineEdit->setPalette(palette);          //Palette  是父类的成员
}

别的方式,

 


2.文字(字体大小,类型)对话框

代码:


#include <QFontDialog>  /** 字体对话框***/
void Widget::slot_pushButton_font()
{
    /***** 获取控件的字体样式 ****/
    QFont font = ui->lineEdit->font(); /*** 获取当前 字体的数据 **/

    bool ok = false;//假设现在没有获取成功 
    font = QFontDialog::getFont(&ok,font,this,"获取新的字体");
    if(ok == true)//获取成功 
    {
        ui->lineEdit->setFont(font);
    }
}

3.文件对话框

A   文件打开对话框 

代码:


#include <QFileDialog> /*** 文件对话框 ***/
#include <QFileInfo> /*** 文件属性 ****/
//这个函数的作用就是 给出你在文件夹里面选择的文件的 路径 + 文件名字 
void Widget::slot_pushButton_file_open()
{
    /*********************************************************************************************************
 *函数原型:QString getOpenFileName(QWidget *parent = Q_NULLPTR,
                                   const QString &caption = QString(),
                                   const QString &dir = QString(),
                                   const QString &filter = QString(),
                                   QString *selectedFilter = Q_NULLPTR,
                                   Options options = Options());
 *参数:
 *  @parent : 父类指针
 *  @caption: 标题
 *  @dir : 默认打开的目录
 *  @filter : 赛选  - 赛选格式 "名称1 (文件格式1 文件格式2) ;; 名称2 (文件格式3 文件格式4)"
 *             "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
 ************************************************************************************************************/
    QString path_file = QFileDialog::getOpenFileName(this,
                                                     "请选择要打开的文件",
                                                     "C:\\Users\\Administrator\\Pictures\\抗疫图片",
                                                     "图片 (*.jpeg *.png *.jpg) ;; 所有文件 (*.*)"
                                                     );

    ui->lineEdit->setText(path_file); /** 内容  在控件里面打印路径+ 文件名字  ***/
    ui->lineEdit_path->setText(QFileInfo(path_file).filePath()); /** 打印路径 ***/
    ui->lineEdit_filename->setText(QFileInfo(path_file).fileName()); /** 打印文件名 ***/

}

B 文件保存对话框

代码:


#include <QFileDialog> /*** 文件对话框 ***/
#include <QFileInfo> /*** 文件属性 ****/
//这个函数就是为了 让你选择一个保存文件的地方,并且选择保存的文件类型(这个可以自己设置)
void Widget::slot_pushButton_file_save()
{
    /*********************************************************************************************************
     *函数原型:QString getSaveFileName(QWidget *parent = Q_NULLPTR,
                                   const QString &caption = QString(),
                                   const QString &dir = QString(),
                                   const QString &filter = QString(),
                                   QString *selectedFilter = Q_NULLPTR,
                                   Options options = Options());
     *参数:
     *  @parent : 父类指针
     *  @caption: 标题
     *  @dir : 默认打开的目录
     *  @filter : 赛选  - 赛选格式 "名称1 (文件格式1 文件格式2) ;; 名称2 (文件格式3 文件格式4)"
     *             "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
     ************************************************************************************************************/
    QString path_file = QFileDialog::getSaveFileName(this,"请选择要保存的路径","C:\\Users\\Administrator\\Pictures\\抗疫图片",
                                                     "C语言 (*.c) ;; C++ (*.cpp) ;; 头文件 (*.h)");

    ui->lineEdit->setText(path_file); /** 打印保存的路径+ 文件名字 内容 ***/
    ui->lineEdit_path->setText(QFileInfo(path_file).filePath()); /** 打印  路径 ***/
    ui->lineEdit_filename->setText(QFileInfo(path_file).fileName()); /** 打印 文件名 ***/
}

C 文件目录对话框 

代码:



#include <QFileDialog> /*** 文件对话框 ***/
#include <QFileInfo> /*** 文件属性 ****/
//获取文件的路径 
void Widget::slot_pushButton_dir()
{
    /*********************************************************************************************************
     *函数原型:QString getExistingDirectory(QWidget *parent = Q_NULLPTR,
                                        const QString &caption = QString(),
                                        const QString &dir = QString(),
                                        Options options = ShowDirsOnly);
     *参数:
     *  @parent : 父类指针
     *  @caption: 标题
     *  @dir : 默认打开的目录
     ************************************************************************************************************/
    QString path_file = QFileDialog::getExistingDirectory(this,"请选择目录","C:\\Users\\Administrator\\Pictures\\抗疫图片");

    if(path_file.isEmpty() == false)
    {
        ui->lineEdit->setText(path_file); /** 内容 ***/
        ui->lineEdit_path->setText(QFileInfo(path_file).filePath()); /** 路径 ***/
        ui->lineEdit_filename->setText(QFileInfo(path_file).fileName()); /** 文件名 ***/
    }
}


4. 警告消息对话框 (warning)

 函数: QMessageBox:: warning (父类指针 , 窗口名字,第一个按钮的文字,第二个按钮的文字)

代码:

#include <QMessageBox> /*** 消息对话框 ***/
void Widget::slot_pushButton_warning()
{
    int button = QMessageBox::warning(this,"错误警告","密码错误,请重新输入","确认重新输入","不输入直接退出");
    switch(button)
    {
        case 0 :
                ui->lineEdit->setText("确认重新输入");
                ui->lineEdit_filename->clear();
        break;
    case 1:
            this->close(); /** 直接关闭 **/
        break;

    }
}

5.提问消息对话框 (question )

函数:  QMessageBox::question( 父类指针, 窗口名字,提问的内容, 选项1,选项2);

代码:


#include <QMessageBox> /*** 消息对话框 ***/
void Widget::slot_pushButton_question()
{
    int button = QMessageBox::question(this,"提问窗体","王老师帅么?",QMessageBox::Yes,QMessageBox::No);
    switch(button)
    {
        case QMessageBox::Yes: ui->lineEdit->setText("王老师帅");
        case QMessageBox::No: ui->lineEdit->setText("王老师帅");
    }
}

6.选择信息对话框 (information )

函数 :QMessageBox::information ( 指针, 窗口的名字, 提示内容, 选项 1 | 选项2  )


#include <QMessageBox> /*** 消息对话框 ***/
void Widget::slot_pushButton_information()
{
    int button = QMessageBox::information(this,"王老师帅不帅","请选择",QMessageBox::Yes);
    switch(button)
    {
        case QMessageBox::Yes: ui->lineEdit->setText("王老师帅");
        case QMessageBox::No: ui->lineEdit->setText("王老师帅");
    }
}

7. 警告消息对话框 (critical)

函数: QMessageBox::critical (指针, 窗口提示,中间的提示内容,选项1,选项2)

代码:


#include <QMessageBox> /*** 消息对话框 ***/
void Widget::slot_pushButton_critical()
{
    int button = QMessageBox::critical(this,"内存泄露危险","内存泄露了,是否继续操作","继续操作","取消操作");
    switch(button)
    {
    case 0:ui->lineEdit->setText(QString::number(button) + "继续操作"); break;
    case 1:ui->lineEdit->setText(QString::number(button) + "取消操作"); break;
    }
}

 


8.关于消息对话框 (about )

函数: QMessageBox::about(指针,窗口提示内容)

代码:


#include <QMessageBox> /*** 消息对话框 ***/
void Widget::slot_pushButton_aboutQt()
{
    QMessageBox::aboutQt(this,"关于王老师使用的Qt");
}

 


9.输入消息对话框 ( getText)

函数:QInputDialog::getText(指针,窗口的名字,提示的内容);

代码:


#include <QInputDialog> /*** 输入对话框 ****/
void Widget::slot_pushButton_text_input()
{
    QString text = QInputDialog::getText(this,"获取内容","请输入内容");
    if(text.isEmpty() == false)
    {
        ui->lineEdit->setText(text);
    }
}

 

10. 多行消息输入对话框 (getMultoLine )

函数:QInputDialog::getMultoLine (指针, 窗口的名字,提示语句,写一些文字 在要写在内容的地方, 指示变量(判断是否获取成功!就是是否按下 OK));

代码:


#include <QInputDialog> /*** 输入对话框 ****/
void Widget::slot_pushButton_miulineinput()
{
    /****************************************************************************************************
     * 函数名:QString getMultiLineText(QWidget *parent, const QString &title, const QString &label,
                                    const QString &text = QString(), bool *ok = Q_NULLPTR,
                                    Qt::WindowFlags flags = Qt::WindowFlags(),
        参数:
            @parent : 父对象指针
            @title  : 标题
            @label  : 提示信息
            @text : 默认内容
            @ok : 是否点击确定按钮
            @flags : 窗口样式
        返回:一个QString字符串类型
     * *************************************************************************************************/
    bool ok = false;
    QString text = QInputDialog::getMultiLineText(this,"获取多行文字","请输入内容:","啥也不是",&ok);

    if(ok == true)
    {
        ui->lineEdit->setText(text);
    }
}

 


11. 固定选项的消息选择对话框 (getLtem)

函数:QInputDialog::getItem (指针,窗口名字,提示语句,之前写入选择列表的 QStringList 变量,  开始显示的东西 (第一眼看见的内容), (0,自由工作者, 1 老师。。。。。。。。。。)

,false (窗口式样),(OK) 提示变量)

代码:


#include <QInputDialog> /*** 输入对话框 ****/
void Widget::slot_pushButton_item_input()
{
    /****************************************************************************************************
     * 函数名:QString getItem(QWidget *parent, const QString &title, const QString &label,
                           const QStringList &items, int current = 0, bool editable = true,
                           bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags(),
                           Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
        参数:
            @parent : 父对象指针
            @title  : 标题
            @label  : 提示信息
            @QStringList : 字符串列表中存放的是要选择的项
            @current: 当前选择项下标
            @editable:是否支持编辑
            @ok : 是否点击确定按钮
            @flags : 窗口样式
        返回:一个QString字符串类型
     * *************************************************************************************************/
    bool ok = false;
    QStringList jobs;
    jobs << "自由工作者" << "老师" << "学生" << "躺平大道";

    QString job = QInputDialog::getItem(this,"职业选择","王老师温馨提示-请选择您的职业:",jobs,2,false,&ok);
    if(ok == true)
    {
        ui->lineEdit->setText(QString("职业:") + job);
    }
}

 


12.整数输入对话框 (getint)

函数说明代码里面有 (我懒)

代码:

void Widget::slot_pushButton_int_input()
{
    /****************************************************************************************************
     * 函数名:int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0,
                      int minValue = -2147483647, int maxValue = 2147483647,
                      int step = 1, bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
        参数:
            @parent : 父对象指针
            @title  : 标题
            @label  : 提示信息
            @value  : 默认当前值
            @minValue:最小值范围
            @maxValue:最大值范围
            @step:步长
            @ok : 是否点击确定按钮
            @flags : 窗口样式
        返回:一个整数类型
     * *************************************************************************************************/
    bool ok = false;
    int num_int = QInputDialog::getInt(this,"王老师的整数获取","王老师提示-请输入一个整数:",20,0,999,50,&ok);
    if(ok == true)
    {
        ui->lineEdit->setText(QString::number(num_int));
    }
}

 


13.浮点型数据输入对话框 (getDouble)

代码:


#include <QInputDialog> /*** 输入对话框 ****/
void Widget::slot_pushButton_double_input()
{
    /*************************************************************************************************
     * 函数名:double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0,
                            double minValue = -2147483647, double maxValue = 2147483647,
                            int decimals = 1, bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
        参数:
            @parent : 父对象指针
            @title  : 标题
            @label  : 提示信息
            @value  : 默认当前值
            @minValue:最小值范围
            @maxValue:最大值范围
            @decimals:小数位数
            @ok : 是否点击确定按钮
            @flags : 窗口样式
        返回一个浮点类型:
     **************************************************************************************************/
    bool ok = false;
    double num_double = QInputDialog::getDouble(this,"获取王老师的浮点","王老师提示-请输入一个浮点数",50.6,0,100,3,&ok);
    if(ok == true)
    {
        ui->lineEdit->setText(QString::number(num_double));
    }
}


 3.文件操作

头文件:
#include <QFileDialog>
#include <QFileInfo>

#include <QFile>

写入文件:

1. 找到文件保存的路径。 path (路径)

2. 实例化文件对象    QFile file(path);

3. 打开文件    file.open(QIODevice::Truncate | QIODevice:: ReadWrite); //没有文件创建,可读可写

4.向文件写入内容 file.write

5.关闭文件

代码:


#include <QFile>
void TextEditor::slot_action_save()
{
    int index = ui->tabWidget->currentIndex();
    QTextEdit *TextEdit = (QTextEdit *)ui->tabWidget->currentWidget();
    if(index >= 0)
    {
        QFile file(FilePath_list[index]); /** 实例化文件类对象 ***/
        qDebug() << "保存路径:" << FilePath_list[index] << endl;
        if (!file.open(QIODevice::Truncate | QIODevice::ReadWrite)) /*** 打开文件 **/
        {
            return;
        }

        //QString text = TextEdit->toHtml();
        QString text = TextEdit->toPlainText();
        file.write(text.toUtf8());

        file.close();
    }
}

读取文件:

1. 找到文件保存的路径。 path (路径)

2. 实例化文件对象    QFile file(path);

3. 打开文件    file.open(QIODevice::ReadOnly | QIODevice::Text); //可读

4.向文件写入内容 file.readLine(); 

5.关闭文件

代码:


#include <QFile>
void TextEditor::slot_action_open()
{
//确定文件的路径
    QString fileName = QFileDialog::getOpenFileName(this,"打开文件",".","C文件 (*.c) ;; C++文件 (*.cpp) ;; 头文件 (*.h) ;; 所有文件 (*.*)");

    //这里不要管
    int index = FilePath_list.indexOf(fileName);
    if(index != -1)
    {
        ui->tabWidget->setCurrentIndex(index);
        return ;
    }
    
    //
    if(fileName.isEmpty() == false)
    {
        QTextEdit *TextEdit = new QTextEdit;
        qDebug() << "地址:" << TextEdit << endl;
        ui->tabWidget->addTab(TextEdit,QFileInfo(fileName).fileName());

        FilePath_list.push_back(QFileInfo(fileName).filePath()); /*** 同步添加到 文件列表中,方便后续操作 ****/

        /***** TextEdit 内容发生改变,则状态栏的字数改变 ****/
        connect(TextEdit,SIGNAL(textChanged()),this,SLOT(slot_TextEdit()));

        /***** 将文件内容读取到 TextEdit 控件中 *******/
        QFile file(fileName);
        if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
            return;

        while (!file.atEnd()) {
            QByteArray line = file.readLine();
            TextEdit->append(line);
        }
        file.close();
    }
}

4.QMainWindow 类型的设计   

开始的ui 设计界面

1. 代码添加菜单

代码:   (因为没有这些图片,所以显示的 名字之前没有图标 )

 QAction *Action_backout = ui->menu_edit->addAction(QIcon(":/文件编辑操作/chexiao.png"),"撤销");
    QAction *Action_redo = ui->menu_edit->addAction(QIcon(":/文件编辑操作/zhongzuo.png"),"重做");
    QAction *Action_copy = ui->menu_edit->addAction(QIcon(":/文件编辑操作/fuzhi.png"),"复制");
    QAction *Action_cut = ui->menu_edit->addAction(QIcon(":/文件编辑操作/jianqie.png"),"剪切");
    QAction *Action_paste = ui->menu_edit->addAction(QIcon(":/文件编辑操作/jurassic_paste_text.png"),"粘贴");
    QAction *Action_font = ui->menu_edit->addAction(QIcon(":/文件编辑操作/zitidaxiao.png"),"字体");
    QAction *Action_color = ui->menu_edit->addAction(QIcon(":/文件编辑操作/jurassic_font-color.png"),"颜色");


    QMenu *menu_add = ui->menu_edit->addMenu(QIcon(":/文件编辑操作/zengjia.png"),"增加");
    QAction *Action_Image = menu_add->addAction(QIcon(":/文件编辑操作/tupian.png"),"图片");
    QAction *Action_table = menu_add->addAction(QIcon(":/文件编辑操作/fsux_tubiao_biaoge.png"),"表格");

之后的样子 


 2. 代码添加工具栏

代码:


       /****** 代码添加工具栏 *******/
       QToolBar *Tool_Edit_Bar = this->addToolBar("编辑工具栏");
       Tool_Edit_Bar->addAction(Action_backout);
       Tool_Edit_Bar->addAction(Action_redo);
       Tool_Edit_Bar->addSeparator();
       Tool_Edit_Bar->addAction(Action_copy);
       Tool_Edit_Bar->addAction(Action_cut);
       Tool_Edit_Bar->addSeparator();
       Tool_Edit_Bar->addAction(Action_paste);
       Tool_Edit_Bar->addSeparator();
       Tool_Edit_Bar->addAction(Action_Image);
       Tool_Edit_Bar->addAction(Action_table);
       Tool_Edit_Bar->addSeparator();
       Tool_Edit_Bar->addAction(Action_font);
       Tool_Edit_Bar->addAction(Action_color);

之后的图片

 


3. 代码增加中央部件

代码:

 /****** 代码增加中央部件 ******/
    //    QPushButton *button = new QPushButton("哈哈");
    //    this->setCentralWidget(button); /*** 设置中央部件 ***/

之后的图片


4. 状态栏

代码:

 ui->statusBar->addWidget(new QLabel("状态栏:"));
           ui->statusBar->addPermanentWidget(new QLabel("当前字数:"));
           QLabel * label_num = new QLabel("0个");
           ui->statusBar->addPermanentWidget(label_num);

 

之后的图片

 


还有一些函数 

(这里的对象 好像是界面里面,被鼠标包括的文字!!)

QTabWidget的每个选项卡都有一个对应的页面部件对象,可用通过currentWidget方法和widget方法来访问该页面部件对象。

所有的代码,自己看

texteditor.h

#ifndef TEXTEDITOR_H
#define TEXTEDITOR_H

#include <QMainWindow>
#include <QStringList>
#include <QLabel>
QT_BEGIN_NAMESPACE
namespace Ui { class TextEditor; }
QT_END_NAMESPACE

class TextEditor : public QMainWindow
{
    Q_OBJECT

public:
    TextEditor(QWidget *parent = nullptr);
    ~TextEditor();

private:
    Ui::TextEditor *ui;
    QStringList FilePath_list; /*** 存放文件路径的表 ***/
    QLabel *label_num;
public slots:
    void slot_action_new();
    void slot_TextEdit();
    void slot_Action_copy();
    void slot_Action_cut();
    void slot_Action_paste();
    void slot_Action_backout();
    void slot_Action_redo();
    void slot_Action_font();
    void slot_Action_color();
    void slot_Action_Image();
    void slot_Action_table();
    void slot_action_save();
    void slot_action_open();
};
#endif // TEXTEDITOR_H


texteditor.cpp

#include "texteditor.h"
#include "ui_texteditor.h"
#include <QPushButton>
#include <QLabel>
#include <QFileDialog>
#include <QFileInfo>
#include <QTextEdit> /*** 文本编辑框 ***/
#include <QDebug>
#include <QTextFrame>
TextEditor::TextEditor(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::TextEditor)
{
    ui->setupUi(this);

    /******* 代码添加菜单 ******/
    QAction *Action_backout = ui->menu_edit->addAction(QIcon(":/文件编辑操作/chexiao.png"),"撤销");
    QAction *Action_redo = ui->menu_edit->addAction(QIcon(":/文件编辑操作/zhongzuo.png"),"重做");
    QAction *Action_copy = ui->menu_edit->addAction(QIcon(":/文件编辑操作/fuzhi.png"),"复制");
    QAction *Action_cut = ui->menu_edit->addAction(QIcon(":/文件编辑操作/jianqie.png"),"剪切");
    QAction *Action_paste = ui->menu_edit->addAction(QIcon(":/文件编辑操作/jurassic_paste_text.png"),"粘贴");
    QAction *Action_font = ui->menu_edit->addAction(QIcon(":/文件编辑操作/zitidaxiao.png"),"字体");
    QAction *Action_color = ui->menu_edit->addAction(QIcon(":/文件编辑操作/jurassic_font-color.png"),"颜色");


    QMenu *menu_add = ui->menu_edit->addMenu(QIcon(":/文件编辑操作/zengjia.png"),"增加");
    QAction *Action_Image = menu_add->addAction(QIcon(":/文件编辑操作/tupian.png"),"图片");
    QAction *Action_table = menu_add->addAction(QIcon(":/文件编辑操作/fsux_tubiao_biaoge.png"),"表格");


    /****** 代码添加工具栏 *******/
    QToolBar *Tool_Edit_Bar = this->addToolBar("编辑工具栏");
    Tool_Edit_Bar->addAction(Action_backout);
    Tool_Edit_Bar->addAction(Action_redo);
    Tool_Edit_Bar->addSeparator();
    Tool_Edit_Bar->addAction(Action_copy);
    Tool_Edit_Bar->addAction(Action_cut);
    Tool_Edit_Bar->addSeparator();
    Tool_Edit_Bar->addAction(Action_paste);
    Tool_Edit_Bar->addSeparator();
    Tool_Edit_Bar->addAction(Action_Image);
    Tool_Edit_Bar->addAction(Action_table);
    Tool_Edit_Bar->addSeparator();
    Tool_Edit_Bar->addAction(Action_font);
    Tool_Edit_Bar->addAction(Action_color);

    /****** 代码增加中央部件 ******/
    //    QPushButton *button = new QPushButton("哈哈");
    //    this->setCentralWidget(button); /*** 设置中央部件 ***/

    /****** 状态栏 ***************
     * addWidget() 左边添加控件
     * addPermanentWidget() 右边添加控件
     * ************************/
    ui->statusbar->addWidget(new QLabel("状态栏:"));
    ui->statusbar->addPermanentWidget(new QLabel("当前字数:"));
    label_num = new QLabel("0个");
    ui->statusbar->addPermanentWidget(label_num);


    /**************** 链接信号槽 ***********************/
    connect(ui->action_new,SIGNAL(triggered(bool)),this,SLOT(slot_action_new()));
    connect(Action_copy,SIGNAL(triggered(bool)),this,SLOT(slot_Action_copy()));
    connect(Action_cut,SIGNAL(triggered(bool)),this,SLOT(slot_Action_cut()));
    connect(Action_paste,SIGNAL(triggered(bool)),this,SLOT(slot_Action_paste()));
    connect(Action_backout,SIGNAL(triggered(bool)),this,SLOT(slot_Action_backout()));
    connect(Action_redo,SIGNAL(triggered(bool)),this,SLOT(slot_Action_redo()));
    connect(Action_font,SIGNAL(triggered(bool)),this,SLOT(slot_Action_font()));
    connect(Action_color,SIGNAL(triggered(bool)),this,SLOT(slot_Action_color()));
    connect(Action_Image,SIGNAL(triggered(bool)),this,SLOT(slot_Action_Image()));
    connect(Action_table,SIGNAL(triggered(bool)),this,SLOT(slot_Action_table()));
    connect(ui->action_save,SIGNAL(triggered(bool)),this,SLOT(slot_action_save()));
    connect(ui->action_open,SIGNAL(triggered(bool)),this,SLOT(slot_action_open()));;;;;;;;;;;;;;;;;;;;;;;;;
}

#include <QFile>
void TextEditor::slot_action_save()
{
    int index = ui->tabWidget->currentIndex();
    QTextEdit *TextEdit = (QTextEdit *)ui->tabWidget->currentWidget();
    if(index >= 0)
    {
        QFile file(FilePath_list[index]); /** 实例化文件类对象 ***/
        qDebug() << "保存路径:" << FilePath_list[index] << endl;
        if (!file.open(QIODevice::Truncate | QIODevice::ReadWrite)) /*** 打开文件 **/
        {
            return;
        }

        //QString text = TextEdit->toHtml();
        QString text = TextEdit->toPlainText();
        file.write(text.toUtf8());

        file.close();
    }
}

#include <QFile>
void TextEditor::slot_action_open()
{
    QString fileName = QFileDialog::getOpenFileName(this,"打开文件",".","C文件 (*.c) ;; C++文件 (*.cpp) ;; 头文件 (*.h) ;; 所有文件 (*.*)");


    int index = FilePath_list.indexOf(fileName);
    if(index != -1)
    {
        ui->tabWidget->setCurrentIndex(index);
        return ;
    }

    if(fileName.isEmpty() == false)
    {
        QTextEdit *TextEdit = new QTextEdit;
        qDebug() << "地址:" << TextEdit << endl;
        ui->tabWidget->addTab(TextEdit,QFileInfo(fileName).fileName());

        FilePath_list.push_back(QFileInfo(fileName).filePath()); /*** 同步添加到 文件列表中,方便后续操作 ****/

        /***** TextEdit 内容发生改变,则状态栏的字数改变 ****/
        connect(TextEdit,SIGNAL(textChanged()),this,SLOT(slot_TextEdit()));

        /***** 将文件内容读取到 TextEdit 控件中 *******/
        QFile file(fileName);
        if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
            return;

        while (!file.atEnd()) {
            QByteArray line = file.readLine();
            TextEdit->append(line);
        }
        file.close();
    }
}


#include <QFileDialog> /*** 文件对话框 ***/
void TextEditor::slot_Action_Image()
{
    /**** 获取 QTExtEdit 的当前这字体 ****/
    QWidget *widget = ui->tabWidget->currentWidget();
    if(widget != NULL)
    {
        QTextEdit *TextEdit = (QTextEdit *)widget; /*** 强制转换回 QTextEdit* 指针.方便使用 ***/

        /**** 获取当前光标位置 ***/
        QTextCursor TextCursor = TextEdit->textCursor();
        QString file_name = QFileDialog::getOpenFileName(this,"选择图片","C:\\Users\\Administrator\\Pictures",
                                                         "图片 (*.jpeg *.jpg *.png) ;; 所有文件 (*.*)");
        if(file_name.isEmpty() == false)
        {
            TextCursor.insertImage(QImage(file_name));
        }
    }
}

#include <QInputDialog> /*** 标准输入对话框 ***/
#include <QTextTable>
void TextEditor::slot_Action_table()
{
    /**** 获取 QTExtEdit 的当前这字体 ****/
    QWidget *widget = ui->tabWidget->currentWidget();
    if(widget != NULL)
    {
        QTextEdit *TextEdit = (QTextEdit *)widget; /*** 强制转换回 QTextEdit* 指针.方便使用 ***/
        /**** 获取当前光标位置 ***/
        QTextCursor TextCursor = TextEdit->textCursor();
        bool ok = false;
        int row = QInputDialog::getInt(this,"输入表格行","请输入表格行",0,0,1000000,5,&ok);
        if(ok == true)
        {
            int lount = QInputDialog::getInt(this,"输入表格列","请输入表格列",0,0,1000000,5,&ok);
            if(ok == true)
            {
                QTextTable *TextTable = TextCursor.insertTable(row,lount);
                TextTable->mergeCells(0, 0, 1, 2);
            }
        }
    }
}



#include <QColorDialog> /** 颜色对话框 ***/
void TextEditor::slot_Action_color()
{
    /**** 获取 QTExtEdit 的当前这字体 ****/
    QWidget *widget = ui->tabWidget->currentWidget();
    if(widget != NULL)
    {
        QTextEdit *TextEdit = (QTextEdit *)widget; /*** 强制转换回 QTextEdit* 指针.方便使用 ***/

        QColor color = TextEdit->textColor(); /*** 获取当前字体颜色 ***/
        QColor color_temp = QColorDialog::getColor(color,this,"获取颜色");

        if(color_temp.isValid() == true) /** 判断颜色是否有效,因为颜色对话框没有预留点击确定通知 ***/
        {
#if 1 /** 前景色,字体颜色 ***/
            TextEdit->setTextColor(color_temp);
#endif
#if 0  /**** 背景块颜色 ****/
            QTextCursor TextCursor = TextEdit->textCursor();
            QTextBlockFormat TextBlockFormat = TextCursor.blockFormat();
            TextBlockFormat.setBackground(QBrush(color_temp));
            TextCursor.setBlockFormat(TextBlockFormat);
#endif
#if 0 /**** 整个背景 ****/
            TextEdit->setAutoFillBackground(true);
            QPalette palette = TextEdit->palette();
            palette.setColor(QPalette::Base,color_temp);
            TextEdit->setPalette(palette);
#endif
        }
    }
}




#include <QFontDialog> /*** 字体对话框 ***/
void TextEditor::slot_Action_font()
{
    /**** 获取 QTExtEdit 的当前这字体 ****/
    QWidget *widget = ui->tabWidget->currentWidget();
    if(widget != NULL)
    {
        QTextEdit *TextEdit = (QTextEdit *)widget; /*** 强制转换回 QTextEdit* 指针.方便使用 ***/

        QFont font = TextEdit->currentFont(); /*** 获取QTextEdit当前选中文字的字体 ***/

        bool ok = false;
        font = QFontDialog::getFont(&ok,font,this,"获取字体"); /*** 通过字体对话框获取用户选择的字体 ***/
        if(ok == true)
        {
            TextEdit->setCurrentFont(font); /*** 将字体设置到 QTextEidt 当前选中的文字上 ***/
        }
    }
}

void TextEditor::slot_Action_redo()
{
    QWidget *widget = ui->tabWidget->currentWidget();
    if(widget != NULL)
    {
        QTextEdit *TextEdit = (QTextEdit *)widget;
        TextEdit->redo();   /*** 重做上一个操作 ***/
    }
}



void TextEditor::slot_Action_backout()
{
    QWidget *widget = ui->tabWidget->currentWidget();
    if(widget != NULL)
    {
        QTextEdit *TextEdit = (QTextEdit *)widget;
        TextEdit->undo();   /*** 撤销上一个操作 ***/
    }
}

void TextEditor::slot_Action_paste()
{
    QWidget *widget = ui->tabWidget->currentWidget();
    if(widget != NULL)
    {
        QTextEdit *TextEdit = (QTextEdit *)widget;
        TextEdit->paste(); /*** 粘贴 ***/
    }
}

void TextEditor::slot_Action_cut()
{
    QWidget *widget = ui->tabWidget->currentWidget();
    if(widget != NULL)
    {
        QTextEdit *TextEdit = (QTextEdit *)widget;
        TextEdit->cut(); /*** 剪切 ***/
    }
}


void TextEditor::slot_Action_copy()
{
    QWidget *widget = ui->tabWidget->currentWidget();
    if(widget != NULL)
    {
        QTextEdit *TextEdit = (QTextEdit *)widget;
        TextEdit->copy(); /*** 复制 ***/
    }
}




#include <QFileDialog>
#include <QFileInfo>
#include <QTextEdit> /*** 文本编辑框 ***/
#include <QDebug>
void TextEditor::slot_action_new()
{
    QString fileName = QFileDialog::getSaveFileName(this,"新建文件",".","C文件 (*.c) ;; C++文件 (*.cpp) ;; 头文件 (*.h) ;; 所有文件 (*.*)");
    if(fileName.isEmpty() == false)
    {
        QTextEdit *TextEdit = new QTextEdit;
        qDebug() << "地址:" << TextEdit << endl;
        ui->tabWidget->addTab(TextEdit,QFileInfo(fileName).fileName());

        FilePath_list.push_back(QFileInfo(fileName).filePath()); /*** 同步添加到 文件列表中,方便后续操作 ****/

        /***** TextEdit 内容发生改变,则状态栏的字数改变 ****/
        connect(TextEdit,SIGNAL(textChanged()),this,SLOT(slot_TextEdit()));
    }
}

/***** 信号槽: 发送者 **********************
 * 发送者对象指针 : QObject *sender() const
 * ***************************************/
void TextEditor::slot_TextEdit()
{
    //qDebug() << "地址:" << sender() << endl;
    QTextEdit *sender_TextEdit = (QTextEdit *)sender();
    /********* 转换回来 ***************/
    int num = sender_TextEdit->toPlainText().size();
    label_num->setText(QString::number(num) + " 字");
}


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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/67293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Three.js一学就会系列:01 第一个3D网站

文章目录前言一、Three.js是什么&#xff1f;官网官网示例效果尝鲜二、使用步骤1.引入three.js库2.使用方法创建一个场景创建一个透视摄像机将渲染器添加到页面上创建一个立方体渲染场景立方体动起来效果总结前言 最近开始入坑前端3D建站&#xff0c;跟大家一起慢慢深入three.…

Android 面试拒收Offer篇,这样做对吗?

作者&#xff1a;如梦 如梦朦胧 朋友们的劝说下&#xff0c;有了换工作的躁动,然后投了某度的Android岗位,本以为像我这种非211、985没工作经验的渣渣只能被直接pass,结果却意外的收到了电话,真是受宠若惊.经过电面,技术三面,然后就是等通知到最后拿到了OFFER,如梦一般,真是挺…

性能优化:Redis使用优化(1)

参考资料&#xff1a; 《Redis为什么变慢了&#xff1f;一文讲透如何排查Redis性能问题 | 万字长文》 相关文章&#xff1a; 《Redis&#xff1a;内存淘汰机制》 《Redis&#xff1a;持久化RDB与AOF》 《Redis&#xff1a;主从复制》 写在开头&#xff1a;本文为学习后的总…

Spring中事务失效的场景

文章目录1 抛出检查异常导致事务不能正确回滚1.1 异常演示1.2 解决办法2 业务方法内自己 try-catch 异常导致事务不能正常回滚1.1 异常演示1.2 解决办法3 aop切面顺序导致事务不能正确回滚3.1 异常演示3.2 解决办法4 非 public 方法导致事务的失效4.1 异常演示4.2 解决办法5 父…

深度学习-全卷积神经网络(FCN)

1. 简介 全卷积神经网络&#xff08;Fully Convolutional Networks&#xff0c;FCN&#xff09;是Jonathan Long等人于2015年在Fully Convolutional Networks for Semantic Segmentation一文中提出的用于图像语义分割的一种框架&#xff0c;是深度学习用于语义分割领域的开山之…

【目标检测】【DDPM】DiffusionDet:用于检测的概率扩散模型

文章目录摘要一、Introduction二、相关工作三、方法1.准备工作2.架构3、训练4.预测过程四. 实验1.训练策略2.main property3.消融实验五、代码分析1.测试 demo.py2.训练 train-net.py总结摘要 我们提出了扩散det&#xff0c;一个新的框架&#xff0c;将目标检测作为一个从噪声…

OpenGL基础程序结构

用OpenGL编写的程序结构类似于用其他语言编写的程序。实际上&#xff0c;OpenGL是一个丰富的三维图形函数库&#xff0c;编写OpenGL程序并非难事&#xff0c;只需在基本C语言中调用这些函数&#xff0c;用法同Turbo C、Microsoft C等类似&#xff0c;但也有许多不同之处。   …

[附源码]Python计算机毕业设计Django校园招聘系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

功能测试求职难,现在不懂自动化测试连外包都进不去了?

功能测试求职难 最近因为公司政策原因&#xff0c;部分外包被裁员&#xff0c;其中不乏能力还不错&#xff0c;工作也挺踏实的&#xff0c;比较可惜&#xff0c;为了帮助他们尽快找到下家&#xff0c;我这边也开始帮他们关注招聘情况&#xff0c;发现一个挺让我意外的事情。在…

Java中CAS详解

一、什么是CAS 什么是CAS机制 CAS机制是一种数据更新的方式。在具体讲什么是CAS机制之前&#xff0c;我们先来聊下在多线程环境下&#xff0c;对共享变量进行数据更新的两种模式&#xff1a;悲观锁模式和乐观锁模式。 悲观锁更新的方式认为&#xff1a;在更新数据的时候大概率…

Android 动画和过渡

Android 动画和过渡 &#xff08;一&#xff09; 动画 JetpackCompose提供了强大且可扩展的API&#xff0c;可以轻松地在应用程序的UI中实现各种动画。下面描述了如何使用这些API以及根据动画场景使用哪些API。 动画在现代移动应用程序中至关重要&#xff0c;以实现流畅和可理解…

【语音处理】基于自适应差分脉冲编码调制(ADPCM)的实现研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

目标检测算法——安全帽识别数据集(附下载链接)

&#x1f384;&#x1f384;近期&#xff0c;小海带在空闲之余收集整理了一批安全帽识别数据集供大家参考。 整理不易&#xff0c;小伙伴们记得一键三连喔&#xff01;&#xff01;&#xff01;&#x1f388;&#x1f388; 目录 一、安全帽佩戴数据集 二、SHWD安全帽佩戴检测…

五、分页总结

文章目录一、分页的几种方式1、使用关键字实现分页&#xff08;limit&#xff09;2、通过 RowBounds 类实现分页查询3、使用分页插件实现分页分页的作用&#xff1a;在进行查询时如果数据量庞大的话会造成大量的内存压力&#xff0c;让程序卡顿。这时候使用分页减少数据的处理量…

基于SpringBoot编写starter,自己写个类库引入使用

我们在做springboot项目的时候经常会创建项目后先引入各种starter&#xff0c;比如操作数据库的mybatis-plus-boot-starter&#xff0c;数据源的druid-spring-boot-starter等等。引入starter的好处就是可以将第三方的依赖库快速的整合到我们自己的springboot项目中&#xff0c;…

​最新Xcode9 无证书真机调试流程

写在前面 公司分配了新的测试机,证书99台名额已满,所以上网找教程,学习了一下如何使用Xcode无证书进行真机调试。​ 一. 创建证书​ 1. 运行Xcode&#xff0c; Xcode–》Preference–》添加账号&#xff08;能在appstore下载的账号&#xff09;​ 2. 选中刚才添加的AppleID–…

JSP 社区联动系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 社区联动系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发&#xff0c;数据库为Mysql&#xff0c;使用ja…

鸿蒙harmony天气预报Demo

1.准备工作 1.1创建项目 sdk为6版本&#xff0c;所以使用华为的远程模拟器p40即可。 1.2准备图片资源 这里把天气预报用到的天气提示的图片全放在资源目录下的media文件下。 具体资源在github仓库已包含&#xff0c;自行前往。 1.3配置文件 接着是修改配置文件&#xff0…

[附源码]Python计算机毕业设计SSM家教管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

DevComponents.DotNetBar2之SuperTabControl使用技巧

关于类似SuperTabControl的使用如何动态调整其TAB标签的顺序问题&#xff0c;搜了全网也没有找到类似答案&#xff0c;都提到tab键的顺序或者是通过控件界面进行调整其顺序&#xff0c;都不是想要的结果&#xff0c;有个网友问的类似问题但是没有一个答案可用。经过反复测试总结…