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


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

     

    相关的代码;

    首先是函数

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

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

     2. horizontalSlider  控件的函数 ()

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

     3.  lcdNumber  控件的函数

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

    4. progressBar  控件的函数

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

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

    代码:

    1. ui->dial->setRange(0,100);//设置范围
    2. ui->dial->setValue(0);//设置目标的值
    3. ui->horizontalSlider->setRange(0,100);//设置范围
    4. ui->horizontalSlider->setValue(0);
    5. ui->lcdNumber->display(1);//设置为1
    6. ui->lcdNumber_2->display(2);//设置为 2
    7. ui->progressBar->setRange(0,100);
    8. ui->progressBar->setValue(0);
    9. connect(ui->dial,SIGNAL(valueChanged(int)),ui->horizontalSlider,SLOT(setValue(int)));
    10. 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. 颜色对话框

    代码:

    1. #include <QColorDialog> /*** 颜色对话框 ***/
    2. void Widget::slot_pushButton_color()
    3. {
    4. ui->lineEdit->setAutoFillBackground(true); /*** 设置自动背景颜色填充 ***/
    5. /**** 获取 QLineEdit 的画板颜色 ****/
    6. QPalette palette = ui->lineEdit->palette();
    7. QColor color = palette.color(QPalette::Base); /*** 获取背景颜色 ***/
    8. color = QColorDialog::getColor(color); /*获取颜色对话框返回的 QColor */
    9. palette.setColor(QPalette::Base,color); //QPalette::Base背景颜色
    10. ui->lineEdit->setPalette(palette); //Palette 是父类的成员
    11. }

    别的方式,

     


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

    代码:

    1. #include <QFontDialog> /** 字体对话框***/
    2. void Widget::slot_pushButton_font()
    3. {
    4. /***** 获取控件的字体样式 ****/
    5. QFont font = ui->lineEdit->font(); /*** 获取当前 字体的数据 **/
    6. bool ok = false;//假设现在没有获取成功
    7. font = QFontDialog::getFont(&ok,font,this,"获取新的字体");
    8. if(ok == true)//获取成功
    9. {
    10. ui->lineEdit->setFont(font);
    11. }
    12. }

    3.文件对话框

    A   文件打开对话框 

    代码:

    1. #include <QFileDialog> /*** 文件对话框 ***/
    2. #include <QFileInfo> /*** 文件属性 ****/
    3. //这个函数的作用就是 给出你在文件夹里面选择的文件的 路径 + 文件名字
    4. void Widget::slot_pushButton_file_open()
    5. {
    6. /*********************************************************************************************************
    7. *函数原型:QString getOpenFileName(QWidget *parent = Q_NULLPTR,
    8. const QString &caption = QString(),
    9. const QString &dir = QString(),
    10. const QString &filter = QString(),
    11. QString *selectedFilter = Q_NULLPTR,
    12. Options options = Options());
    13. *参数:
    14. * @parent : 父类指针
    15. * @caption: 标题
    16. * @dir : 默认打开的目录
    17. * @filter : 赛选 - 赛选格式 "名称1 (文件格式1 文件格式2) ;; 名称2 (文件格式3 文件格式4)"
    18. * "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
    19. ************************************************************************************************************/
    20. QString path_file = QFileDialog::getOpenFileName(this,
    21. "请选择要打开的文件",
    22. "C:\\Users\\Administrator\\Pictures\\抗疫图片",
    23. "图片 (*.jpeg *.png *.jpg) ;; 所有文件 (*.*)"
    24. );
    25. ui->lineEdit->setText(path_file); /** 内容 在控件里面打印路径+ 文件名字 ***/
    26. ui->lineEdit_path->setText(QFileInfo(path_file).filePath()); /** 打印路径 ***/
    27. ui->lineEdit_filename->setText(QFileInfo(path_file).fileName()); /** 打印文件名 ***/
    28. }

    B 文件保存对话框

    代码:

    1. #include <QFileDialog> /*** 文件对话框 ***/
    2. #include <QFileInfo> /*** 文件属性 ****/
    3. //这个函数就是为了 让你选择一个保存文件的地方,并且选择保存的文件类型(这个可以自己设置)
    4. void Widget::slot_pushButton_file_save()
    5. {
    6. /*********************************************************************************************************
    7. *函数原型:QString getSaveFileName(QWidget *parent = Q_NULLPTR,
    8. const QString &caption = QString(),
    9. const QString &dir = QString(),
    10. const QString &filter = QString(),
    11. QString *selectedFilter = Q_NULLPTR,
    12. Options options = Options());
    13. *参数:
    14. * @parent : 父类指针
    15. * @caption: 标题
    16. * @dir : 默认打开的目录
    17. * @filter : 赛选 - 赛选格式 "名称1 (文件格式1 文件格式2) ;; 名称2 (文件格式3 文件格式4)"
    18. * "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
    19. ************************************************************************************************************/
    20. QString path_file = QFileDialog::getSaveFileName(this,"请选择要保存的路径","C:\\Users\\Administrator\\Pictures\\抗疫图片",
    21. "C语言 (*.c) ;; C++ (*.cpp) ;; 头文件 (*.h)");
    22. ui->lineEdit->setText(path_file); /** 打印保存的路径+ 文件名字 内容 ***/
    23. ui->lineEdit_path->setText(QFileInfo(path_file).filePath()); /** 打印 路径 ***/
    24. ui->lineEdit_filename->setText(QFileInfo(path_file).fileName()); /** 打印 文件名 ***/
    25. }

    C 文件目录对话框 

    代码:

    1. #include <QFileDialog> /*** 文件对话框 ***/
    2. #include <QFileInfo> /*** 文件属性 ****/
    3. //获取文件的路径
    4. void Widget::slot_pushButton_dir()
    5. {
    6. /*********************************************************************************************************
    7. *函数原型:QString getExistingDirectory(QWidget *parent = Q_NULLPTR,
    8. const QString &caption = QString(),
    9. const QString &dir = QString(),
    10. Options options = ShowDirsOnly);
    11. *参数:
    12. * @parent : 父类指针
    13. * @caption: 标题
    14. * @dir : 默认打开的目录
    15. ************************************************************************************************************/
    16. QString path_file = QFileDialog::getExistingDirectory(this,"请选择目录","C:\\Users\\Administrator\\Pictures\\抗疫图片");
    17. if(path_file.isEmpty() == false)
    18. {
    19. ui->lineEdit->setText(path_file); /** 内容 ***/
    20. ui->lineEdit_path->setText(QFileInfo(path_file).filePath()); /** 路径 ***/
    21. ui->lineEdit_filename->setText(QFileInfo(path_file).fileName()); /** 文件名 ***/
    22. }
    23. }


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

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

    代码:

    1. #include <QMessageBox> /*** 消息对话框 ***/
    2. void Widget::slot_pushButton_warning()
    3. {
    4. int button = QMessageBox::warning(this,"错误警告","密码错误,请重新输入","确认重新输入","不输入直接退出");
    5. switch(button)
    6. {
    7. case 0 :
    8. ui->lineEdit->setText("确认重新输入");
    9. ui->lineEdit_filename->clear();
    10. break;
    11. case 1:
    12. this->close(); /** 直接关闭 **/
    13. break;
    14. }
    15. }

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

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

    代码:

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

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

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

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

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

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

    代码:

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

     


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

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

    代码:

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

     


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

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

    代码:

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

     

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

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

    代码:

    1. #include <QInputDialog> /*** 输入对话框 ****/
    2. void Widget::slot_pushButton_miulineinput()
    3. {
    4. /****************************************************************************************************
    5. * 函数名:QString getMultiLineText(QWidget *parent, const QString &title, const QString &label,
    6. const QString &text = QString(), bool *ok = Q_NULLPTR,
    7. Qt::WindowFlags flags = Qt::WindowFlags(),
    8. 参数:
    9. @parent : 父对象指针
    10. @title : 标题
    11. @label : 提示信息
    12. @text : 默认内容
    13. @ok : 是否点击确定按钮
    14. @flags : 窗口样式
    15. 返回:一个QString字符串类型
    16. * *************************************************************************************************/
    17. bool ok = false;
    18. QString text = QInputDialog::getMultiLineText(this,"获取多行文字","请输入内容:","啥也不是",&ok);
    19. if(ok == true)
    20. {
    21. ui->lineEdit->setText(text);
    22. }
    23. }

     


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

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

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

    代码:

    1. #include <QInputDialog> /*** 输入对话框 ****/
    2. void Widget::slot_pushButton_item_input()
    3. {
    4. /****************************************************************************************************
    5. * 函数名:QString getItem(QWidget *parent, const QString &title, const QString &label,
    6. const QStringList &items, int current = 0, bool editable = true,
    7. bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags(),
    8. Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
    9. 参数:
    10. @parent : 父对象指针
    11. @title : 标题
    12. @label : 提示信息
    13. @QStringList : 字符串列表中存放的是要选择的项
    14. @current: 当前选择项下标
    15. @editable:是否支持编辑
    16. @ok : 是否点击确定按钮
    17. @flags : 窗口样式
    18. 返回:一个QString字符串类型
    19. * *************************************************************************************************/
    20. bool ok = false;
    21. QStringList jobs;
    22. jobs << "自由工作者" << "老师" << "学生" << "躺平大道";
    23. QString job = QInputDialog::getItem(this,"职业选择","王老师温馨提示-请选择您的职业:",jobs,2,false,&ok);
    24. if(ok == true)
    25. {
    26. ui->lineEdit->setText(QString("职业:") + job);
    27. }
    28. }

     


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

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

    代码:

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

     


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

    代码:

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


     3.文件操作

    头文件:
    #include
    #include

    #include

    写入文件:

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

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

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

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

    5.关闭文件

    代码:

    1. #include <QFile>
    2. void TextEditor::slot_action_save()
    3. {
    4. int index = ui->tabWidget->currentIndex();
    5. QTextEdit *TextEdit = (QTextEdit *)ui->tabWidget->currentWidget();
    6. if(index >= 0)
    7. {
    8. QFile file(FilePath_list[index]); /** 实例化文件类对象 ***/
    9. qDebug() << "保存路径:" << FilePath_list[index] << endl;
    10. if (!file.open(QIODevice::Truncate | QIODevice::ReadWrite)) /*** 打开文件 **/
    11. {
    12. return;
    13. }
    14. //QString text = TextEdit->toHtml();
    15. QString text = TextEdit->toPlainText();
    16. file.write(text.toUtf8());
    17. file.close();
    18. }
    19. }

    读取文件:

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

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

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

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

    5.关闭文件

    代码:

    1. #include <QFile>
    2. void TextEditor::slot_action_open()
    3. {
    4. //确定文件的路径
    5. QString fileName = QFileDialog::getOpenFileName(this,"打开文件",".","C文件 (*.c) ;; C++文件 (*.cpp) ;; 头文件 (*.h) ;; 所有文件 (*.*)");
    6. //这里不要管
    7. int index = FilePath_list.indexOf(fileName);
    8. if(index != -1)
    9. {
    10. ui->tabWidget->setCurrentIndex(index);
    11. return ;
    12. }
    13. //
    14. if(fileName.isEmpty() == false)
    15. {
    16. QTextEdit *TextEdit = new QTextEdit;
    17. qDebug() << "地址:" << TextEdit << endl;
    18. ui->tabWidget->addTab(TextEdit,QFileInfo(fileName).fileName());
    19. FilePath_list.push_back(QFileInfo(fileName).filePath()); /*** 同步添加到 文件列表中,方便后续操作 ****/
    20. /***** TextEdit 内容发生改变,则状态栏的字数改变 ****/
    21. connect(TextEdit,SIGNAL(textChanged()),this,SLOT(slot_TextEdit()));
    22. /***** 将文件内容读取到 TextEdit 控件中 *******/
    23. QFile file(fileName);
    24. if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    25. return;
    26. while (!file.atEnd()) {
    27. QByteArray line = file.readLine();
    28. TextEdit->append(line);
    29. }
    30. file.close();
    31. }
    32. }

    4.QMainWindow 类型的设计   

    开始的ui 设计界面

    1. 代码添加菜单

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

    1. QAction *Action_backout = ui->menu_edit->addAction(QIcon(":/文件编辑操作/chexiao.png"),"撤销");
    2. QAction *Action_redo = ui->menu_edit->addAction(QIcon(":/文件编辑操作/zhongzuo.png"),"重做");
    3. QAction *Action_copy = ui->menu_edit->addAction(QIcon(":/文件编辑操作/fuzhi.png"),"复制");
    4. QAction *Action_cut = ui->menu_edit->addAction(QIcon(":/文件编辑操作/jianqie.png"),"剪切");
    5. QAction *Action_paste = ui->menu_edit->addAction(QIcon(":/文件编辑操作/jurassic_paste_text.png"),"粘贴");
    6. QAction *Action_font = ui->menu_edit->addAction(QIcon(":/文件编辑操作/zitidaxiao.png"),"字体");
    7. QAction *Action_color = ui->menu_edit->addAction(QIcon(":/文件编辑操作/jurassic_font-color.png"),"颜色");
    8. QMenu *menu_add = ui->menu_edit->addMenu(QIcon(":/文件编辑操作/zengjia.png"),"增加");
    9. QAction *Action_Image = menu_add->addAction(QIcon(":/文件编辑操作/tupian.png"),"图片");
    10. QAction *Action_table = menu_add->addAction(QIcon(":/文件编辑操作/fsux_tubiao_biaoge.png"),"表格");

    之后的样子 


     2. 代码添加工具栏

    代码:

    1. /****** 代码添加工具栏 *******/
    2. QToolBar *Tool_Edit_Bar = this->addToolBar("编辑工具栏");
    3. Tool_Edit_Bar->addAction(Action_backout);
    4. Tool_Edit_Bar->addAction(Action_redo);
    5. Tool_Edit_Bar->addSeparator();
    6. Tool_Edit_Bar->addAction(Action_copy);
    7. Tool_Edit_Bar->addAction(Action_cut);
    8. Tool_Edit_Bar->addSeparator();
    9. Tool_Edit_Bar->addAction(Action_paste);
    10. Tool_Edit_Bar->addSeparator();
    11. Tool_Edit_Bar->addAction(Action_Image);
    12. Tool_Edit_Bar->addAction(Action_table);
    13. Tool_Edit_Bar->addSeparator();
    14. Tool_Edit_Bar->addAction(Action_font);
    15. Tool_Edit_Bar->addAction(Action_color);

    之后的图片

     


    3. 代码增加中央部件

    代码:

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

    之后的图片


    4. 状态栏

    代码:

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

     

    之后的图片

     


    还有一些函数 

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

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

    所有的代码,自己看

    texteditor.h

    1. #ifndef TEXTEDITOR_H
    2. #define TEXTEDITOR_H
    3. #include
    4. #include
    5. #include
    6. QT_BEGIN_NAMESPACE
    7. namespace Ui { class TextEditor; }
    8. QT_END_NAMESPACE
    9. class TextEditor : public QMainWindow
    10. {
    11. Q_OBJECT
    12. public:
    13. TextEditor(QWidget *parent = nullptr);
    14. ~TextEditor();
    15. private:
    16. Ui::TextEditor *ui;
    17. QStringList FilePath_list; /*** 存放文件路径的表 ***/
    18. QLabel *label_num;
    19. public slots:
    20. void slot_action_new();
    21. void slot_TextEdit();
    22. void slot_Action_copy();
    23. void slot_Action_cut();
    24. void slot_Action_paste();
    25. void slot_Action_backout();
    26. void slot_Action_redo();
    27. void slot_Action_font();
    28. void slot_Action_color();
    29. void slot_Action_Image();
    30. void slot_Action_table();
    31. void slot_action_save();
    32. void slot_action_open();
    33. };
    34. #endif // TEXTEDITOR_H


    texteditor.cpp

    1. #include "texteditor.h"
    2. #include "ui_texteditor.h"
    3. #include <QPushButton>
    4. #include <QLabel>
    5. #include <QFileDialog>
    6. #include <QFileInfo>
    7. #include <QTextEdit> /*** 文本编辑框 ***/
    8. #include <QDebug>
    9. #include <QTextFrame>
    10. TextEditor::TextEditor(QWidget *parent)
    11. : QMainWindow(parent)
    12. , ui(new Ui::TextEditor)
    13. {
    14. ui->setupUi(this);
    15. /******* 代码添加菜单 ******/
    16. QAction *Action_backout = ui->menu_edit->addAction(QIcon(":/文件编辑操作/chexiao.png"),"撤销");
    17. QAction *Action_redo = ui->menu_edit->addAction(QIcon(":/文件编辑操作/zhongzuo.png"),"重做");
    18. QAction *Action_copy = ui->menu_edit->addAction(QIcon(":/文件编辑操作/fuzhi.png"),"复制");
    19. QAction *Action_cut = ui->menu_edit->addAction(QIcon(":/文件编辑操作/jianqie.png"),"剪切");
    20. QAction *Action_paste = ui->menu_edit->addAction(QIcon(":/文件编辑操作/jurassic_paste_text.png"),"粘贴");
    21. QAction *Action_font = ui->menu_edit->addAction(QIcon(":/文件编辑操作/zitidaxiao.png"),"字体");
    22. QAction *Action_color = ui->menu_edit->addAction(QIcon(":/文件编辑操作/jurassic_font-color.png"),"颜色");
    23. QMenu *menu_add = ui->menu_edit->addMenu(QIcon(":/文件编辑操作/zengjia.png"),"增加");
    24. QAction *Action_Image = menu_add->addAction(QIcon(":/文件编辑操作/tupian.png"),"图片");
    25. QAction *Action_table = menu_add->addAction(QIcon(":/文件编辑操作/fsux_tubiao_biaoge.png"),"表格");
    26. /****** 代码添加工具栏 *******/
    27. QToolBar *Tool_Edit_Bar = this->addToolBar("编辑工具栏");
    28. Tool_Edit_Bar->addAction(Action_backout);
    29. Tool_Edit_Bar->addAction(Action_redo);
    30. Tool_Edit_Bar->addSeparator();
    31. Tool_Edit_Bar->addAction(Action_copy);
    32. Tool_Edit_Bar->addAction(Action_cut);
    33. Tool_Edit_Bar->addSeparator();
    34. Tool_Edit_Bar->addAction(Action_paste);
    35. Tool_Edit_Bar->addSeparator();
    36. Tool_Edit_Bar->addAction(Action_Image);
    37. Tool_Edit_Bar->addAction(Action_table);
    38. Tool_Edit_Bar->addSeparator();
    39. Tool_Edit_Bar->addAction(Action_font);
    40. Tool_Edit_Bar->addAction(Action_color);
    41. /****** 代码增加中央部件 ******/
    42. // QPushButton *button = new QPushButton("哈哈");
    43. // this->setCentralWidget(button); /*** 设置中央部件 ***/
    44. /****** 状态栏 ***************
    45. * addWidget() 左边添加控件
    46. * addPermanentWidget() 右边添加控件
    47. * ************************/
    48. ui->statusbar->addWidget(new QLabel("状态栏:"));
    49. ui->statusbar->addPermanentWidget(new QLabel("当前字数:"));
    50. label_num = new QLabel("0个");
    51. ui->statusbar->addPermanentWidget(label_num);
    52. /**************** 链接信号槽 ***********************/
    53. connect(ui->action_new,SIGNAL(triggered(bool)),this,SLOT(slot_action_new()));
    54. connect(Action_copy,SIGNAL(triggered(bool)),this,SLOT(slot_Action_copy()));
    55. connect(Action_cut,SIGNAL(triggered(bool)),this,SLOT(slot_Action_cut()));
    56. connect(Action_paste,SIGNAL(triggered(bool)),this,SLOT(slot_Action_paste()));
    57. connect(Action_backout,SIGNAL(triggered(bool)),this,SLOT(slot_Action_backout()));
    58. connect(Action_redo,SIGNAL(triggered(bool)),this,SLOT(slot_Action_redo()));
    59. connect(Action_font,SIGNAL(triggered(bool)),this,SLOT(slot_Action_font()));
    60. connect(Action_color,SIGNAL(triggered(bool)),this,SLOT(slot_Action_color()));
    61. connect(Action_Image,SIGNAL(triggered(bool)),this,SLOT(slot_Action_Image()));
    62. connect(Action_table,SIGNAL(triggered(bool)),this,SLOT(slot_Action_table()));
    63. connect(ui->action_save,SIGNAL(triggered(bool)),this,SLOT(slot_action_save()));
    64. connect(ui->action_open,SIGNAL(triggered(bool)),this,SLOT(slot_action_open()));;;;;;;;;;;;;;;;;;;;;;;;;
    65. }
    66. #include <QFile>
    67. void TextEditor::slot_action_save()
    68. {
    69. int index = ui->tabWidget->currentIndex();
    70. QTextEdit *TextEdit = (QTextEdit *)ui->tabWidget->currentWidget();
    71. if(index >= 0)
    72. {
    73. QFile file(FilePath_list[index]); /** 实例化文件类对象 ***/
    74. qDebug() << "保存路径:" << FilePath_list[index] << endl;
    75. if (!file.open(QIODevice::Truncate | QIODevice::ReadWrite)) /*** 打开文件 **/
    76. {
    77. return;
    78. }
    79. //QString text = TextEdit->toHtml();
    80. QString text = TextEdit->toPlainText();
    81. file.write(text.toUtf8());
    82. file.close();
    83. }
    84. }
    85. #include <QFile>
    86. void TextEditor::slot_action_open()
    87. {
    88. QString fileName = QFileDialog::getOpenFileName(this,"打开文件",".","C文件 (*.c) ;; C++文件 (*.cpp) ;; 头文件 (*.h) ;; 所有文件 (*.*)");
    89. int index = FilePath_list.indexOf(fileName);
    90. if(index != -1)
    91. {
    92. ui->tabWidget->setCurrentIndex(index);
    93. return ;
    94. }
    95. if(fileName.isEmpty() == false)
    96. {
    97. QTextEdit *TextEdit = new QTextEdit;
    98. qDebug() << "地址:" << TextEdit << endl;
    99. ui->tabWidget->addTab(TextEdit,QFileInfo(fileName).fileName());
    100. FilePath_list.push_back(QFileInfo(fileName).filePath()); /*** 同步添加到 文件列表中,方便后续操作 ****/
    101. /***** TextEdit 内容发生改变,则状态栏的字数改变 ****/
    102. connect(TextEdit,SIGNAL(textChanged()),this,SLOT(slot_TextEdit()));
    103. /***** 将文件内容读取到 TextEdit 控件中 *******/
    104. QFile file(fileName);
    105. if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    106. return;
    107. while (!file.atEnd()) {
    108. QByteArray line = file.readLine();
    109. TextEdit->append(line);
    110. }
    111. file.close();
    112. }
    113. }
    114. #include <QFileDialog> /*** 文件对话框 ***/
    115. void TextEditor::slot_Action_Image()
    116. {
    117. /**** 获取 QTExtEdit 的当前这字体 ****/
    118. QWidget *widget = ui->tabWidget->currentWidget();
    119. if(widget != NULL)
    120. {
    121. QTextEdit *TextEdit = (QTextEdit *)widget; /*** 强制转换回 QTextEdit* 指针.方便使用 ***/
    122. /**** 获取当前光标位置 ***/
    123. QTextCursor TextCursor = TextEdit->textCursor();
    124. QString file_name = QFileDialog::getOpenFileName(this,"选择图片","C:\\Users\\Administrator\\Pictures",
    125. "图片 (*.jpeg *.jpg *.png) ;; 所有文件 (*.*)");
    126. if(file_name.isEmpty() == false)
    127. {
    128. TextCursor.insertImage(QImage(file_name));
    129. }
    130. }
    131. }
    132. #include <QInputDialog> /*** 标准输入对话框 ***/
    133. #include <QTextTable>
    134. void TextEditor::slot_Action_table()
    135. {
    136. /**** 获取 QTExtEdit 的当前这字体 ****/
    137. QWidget *widget = ui->tabWidget->currentWidget();
    138. if(widget != NULL)
    139. {
    140. QTextEdit *TextEdit = (QTextEdit *)widget; /*** 强制转换回 QTextEdit* 指针.方便使用 ***/
    141. /**** 获取当前光标位置 ***/
    142. QTextCursor TextCursor = TextEdit->textCursor();
    143. bool ok = false;
    144. int row = QInputDialog::getInt(this,"输入表格行","请输入表格行",0,0,1000000,5,&ok);
    145. if(ok == true)
    146. {
    147. int lount = QInputDialog::getInt(this,"输入表格列","请输入表格列",0,0,1000000,5,&ok);
    148. if(ok == true)
    149. {
    150. QTextTable *TextTable = TextCursor.insertTable(row,lount);
    151. TextTable->mergeCells(0, 0, 1, 2);
    152. }
    153. }
    154. }
    155. }
    156. #include <QColorDialog> /** 颜色对话框 ***/
    157. void TextEditor::slot_Action_color()
    158. {
    159. /**** 获取 QTExtEdit 的当前这字体 ****/
    160. QWidget *widget = ui->tabWidget->currentWidget();
    161. if(widget != NULL)
    162. {
    163. QTextEdit *TextEdit = (QTextEdit *)widget; /*** 强制转换回 QTextEdit* 指针.方便使用 ***/
    164. QColor color = TextEdit->textColor(); /*** 获取当前字体颜色 ***/
    165. QColor color_temp = QColorDialog::getColor(color,this,"获取颜色");
    166. if(color_temp.isValid() == true) /** 判断颜色是否有效,因为颜色对话框没有预留点击确定通知 ***/
    167. {
    168. #if 1 /** 前景色,字体颜色 ***/
    169. TextEdit->setTextColor(color_temp);
    170. #endif
    171. #if 0 /**** 背景块颜色 ****/
    172. QTextCursor TextCursor = TextEdit->textCursor();
    173. QTextBlockFormat TextBlockFormat = TextCursor.blockFormat();
    174. TextBlockFormat.setBackground(QBrush(color_temp));
    175. TextCursor.setBlockFormat(TextBlockFormat);
    176. #endif
    177. #if 0 /**** 整个背景 ****/
    178. TextEdit->setAutoFillBackground(true);
    179. QPalette palette = TextEdit->palette();
    180. palette.setColor(QPalette::Base,color_temp);
    181. TextEdit->setPalette(palette);
    182. #endif
    183. }
    184. }
    185. }
    186. #include <QFontDialog> /*** 字体对话框 ***/
    187. void TextEditor::slot_Action_font()
    188. {
    189. /**** 获取 QTExtEdit 的当前这字体 ****/
    190. QWidget *widget = ui->tabWidget->currentWidget();
    191. if(widget != NULL)
    192. {
    193. QTextEdit *TextEdit = (QTextEdit *)widget; /*** 强制转换回 QTextEdit* 指针.方便使用 ***/
    194. QFont font = TextEdit->currentFont(); /*** 获取QTextEdit当前选中文字的字体 ***/
    195. bool ok = false;
    196. font = QFontDialog::getFont(&ok,font,this,"获取字体"); /*** 通过字体对话框获取用户选择的字体 ***/
    197. if(ok == true)
    198. {
    199. TextEdit->setCurrentFont(font); /*** 将字体设置到 QTextEidt 当前选中的文字上 ***/
    200. }
    201. }
    202. }
    203. void TextEditor::slot_Action_redo()
    204. {
    205. QWidget *widget = ui->tabWidget->currentWidget();
    206. if(widget != NULL)
    207. {
    208. QTextEdit *TextEdit = (QTextEdit *)widget;
    209. TextEdit->redo(); /*** 重做上一个操作 ***/
    210. }
    211. }
    212. void TextEditor::slot_Action_backout()
    213. {
    214. QWidget *widget = ui->tabWidget->currentWidget();
    215. if(widget != NULL)
    216. {
    217. QTextEdit *TextEdit = (QTextEdit *)widget;
    218. TextEdit->undo(); /*** 撤销上一个操作 ***/
    219. }
    220. }
    221. void TextEditor::slot_Action_paste()
    222. {
    223. QWidget *widget = ui->tabWidget->currentWidget();
    224. if(widget != NULL)
    225. {
    226. QTextEdit *TextEdit = (QTextEdit *)widget;
    227. TextEdit->paste(); /*** 粘贴 ***/
    228. }
    229. }
    230. void TextEditor::slot_Action_cut()
    231. {
    232. QWidget *widget = ui->tabWidget->currentWidget();
    233. if(widget != NULL)
    234. {
    235. QTextEdit *TextEdit = (QTextEdit *)widget;
    236. TextEdit->cut(); /*** 剪切 ***/
    237. }
    238. }
    239. void TextEditor::slot_Action_copy()
    240. {
    241. QWidget *widget = ui->tabWidget->currentWidget();
    242. if(widget != NULL)
    243. {
    244. QTextEdit *TextEdit = (QTextEdit *)widget;
    245. TextEdit->copy(); /*** 复制 ***/
    246. }
    247. }
    248. #include <QFileDialog>
    249. #include <QFileInfo>
    250. #include <QTextEdit> /*** 文本编辑框 ***/
    251. #include <QDebug>
    252. void TextEditor::slot_action_new()
    253. {
    254. QString fileName = QFileDialog::getSaveFileName(this,"新建文件",".","C文件 (*.c) ;; C++文件 (*.cpp) ;; 头文件 (*.h) ;; 所有文件 (*.*)");
    255. if(fileName.isEmpty() == false)
    256. {
    257. QTextEdit *TextEdit = new QTextEdit;
    258. qDebug() << "地址:" << TextEdit << endl;
    259. ui->tabWidget->addTab(TextEdit,QFileInfo(fileName).fileName());
    260. FilePath_list.push_back(QFileInfo(fileName).filePath()); /*** 同步添加到 文件列表中,方便后续操作 ****/
    261. /***** TextEdit 内容发生改变,则状态栏的字数改变 ****/
    262. connect(TextEdit,SIGNAL(textChanged()),this,SLOT(slot_TextEdit()));
    263. }
    264. }
    265. /***** 信号槽: 发送者 **********************
    266. * 发送者对象指针 : QObject *sender() const
    267. * ***************************************/
    268. void TextEditor::slot_TextEdit()
    269. {
    270. //qDebug() << "地址:" << sender() << endl;
    271. QTextEdit *sender_TextEdit = (QTextEdit *)sender();
    272. /********* 转换回来 ***************/
    273. int num = sender_TextEdit->toPlainText().size();
    274. label_num->setText(QString::number(num) + " 字");
    275. }
    276. TextEditor::~TextEditor()
    277. {
    278. delete ui;
    279. }

  • 相关阅读:
    力扣练习——67 森林中的兔子
    css画一条渐变的虚线
    【工程实践】Docker使用记录
    Mysql知识复习二
    Java学习——Servlet服务器请求响应程序
    宝塔面板操作日志是存放在哪里的? 如何删除部分日志记录?
    超好用的数据可视化工具推荐,小白也适用!
    虚拟补丁备忘单
    Java案例找素数(三种方法)
    fatal error C1083: 无法打开包括文件: “ta_libc.h”: No such file or directory
  • 原文地址:https://blog.csdn.net/she666666/article/details/128206829