• QT5笔记:3.手动撸界面和可视化托界面混合


    3.手动撸界面和可视化托界面混合

    参考视频:https://www.bilibili.com/video/BV1AX4y1w7Nt

    • 3.1 工具栏可以通过在UI界面右键选择添加工具栏

    • 3.2 设置窗口中心内容 setCentralWidget

      // https://blog.csdn.net/u012627502/article/details/38613041
      //一个Qt主窗口应用程序必须有一个中心窗口部件(Central Widget)。当你采用Qt Designer创建主窗口时,默认情况下,系统已经为你创建了一个中心窗口部件,它是子类化QWidget的。
      setCentralWidget(ui->textEdit);
      
    • 3.3 文本处理小程序

      #include "mainwindow.h"
      #include "ui_mainwindow.h"
      
      MainWindow::MainWindow(QWidget *parent)
          : QMainWindow(parent)
          , ui(new Ui::MainWindow)
      {
          ui->setupUi(this);
          setCentralWidget(ui->textEdit);//将文本框设为中心控件
      
          initUI();//初始化自定义的ui
          initSignalSlot();//初始化信号&槽
      }
      
      MainWindow::~MainWindow()
      {
          delete ui;
      }
      
      /**
       * @brief MainWindow::initUI 初始化界面,并将其他控件添加到状态栏或者工具栏
       */
      void MainWindow::initUI()
      {
          labelFileName = new QLabel();
          labelFileName->setMinimumWidth(150);
          labelFileName->setText("当前文件:");
          ui->statusbar->addWidget(labelFileName); //将QLabel添加到状态栏
      
          processBar = new QProgressBar();
          processBar->setMinimum(5);
          processBar->setMaximum(80);
          processBar->setValue(ui->textEdit->font().pointSize());
          ui->statusbar->addWidget(processBar);//将进度条添加到状态栏
      
          spinBoxFontSize = new QSpinBox();
          spinBoxFontSize->setMinimum(5);
          spinBoxFontSize->setMaximum(80);
          spinBoxFontSize->setValue(ui->textEdit->font().pointSize());
          ui->toolBar->addWidget(new QLabel("字号"));
          ui->toolBar->addWidget(spinBoxFontSize);//将数字调整框添加到状态栏
      
          fontComboBox = new QFontComboBox();
          fontComboBox->setCurrentFont(ui->textEdit->font());
          ui->toolBar->addWidget(new QLabel("字体"));
          ui->toolBar->addWidget(fontComboBox);//将字体选择框添加到状态栏
      
          ui->actBold->setChecked(ui->textEdit->font().bold());
          ui->actItalic->setChecked(ui->textEdit->font().italic());
          ui->actUnderline->setChecked(ui->textEdit->font().underline());
      }
      
      /**
       * @brief MainWindow::initSignalSlot 连接信号和槽
       * @note 如果信号或者槽写错了,不会抛出异常,所以信号和槽要严格按照方法的签名拼写,一个符号都不能出错
       */
      void MainWindow::initSignalSlot()
      {
          connect(spinBoxFontSize,SIGNAL(valueChanged(int)), this, SLOT(on_spinBox_valueChanged(int)));
          connect(fontComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(on_fontComboBox_indexChanged(const QString&)));
      }
      
      /**
       * @description 将所选文本样式加粗
       * @brief MainWindow::on_actUnderline_triggered
       * @param checked
       */
      void MainWindow::on_actBold_triggered(bool checked)
      {
          QTextCharFormat format;// = ui->textEdit->currentCharFormat();
          format.setFontWeight(checked? QFont::Bold : QFont::Normal);
          ui->textEdit->mergeCurrentCharFormat(format);
      }
      
      /**
       * @description 将所选文本样式添加斜体
       * @brief MainWindow::on_actItalic_triggered
       * @param checked
       */
      void MainWindow::on_actItalic_triggered(bool checked)
      {
          QTextCharFormat format;// = ui->textEdit->currentCharFormat();
          format.setFontItalic(checked);
          ui->textEdit->mergeCurrentCharFormat(format);
      }
      
      /**
       * @description 将所选文本样式添加下划线
       * @brief MainWindow::on_actUnderline_triggered
       * @param checked
       */
      void MainWindow::on_actUnderline_triggered(bool checked)
      {
          QTextCharFormat format;// = ui->textEdit->currentCharFormat();
          format.setFontUnderline(checked);
          ui->textEdit->mergeCurrentCharFormat(format);
      }
      
      /**
       * @description 当文本框不能被复制时,禁用工具栏复制、剪切、粘贴按钮
       * @brief MainWindow::on_textEdit_copyAvailable
       * @param b
       */
      void MainWindow::on_textEdit_copyAvailable(bool b)
      {
          ui->actCut->setEnabled(b);
          ui->actCopy->setEnabled(b);
          ui->actPaste->setEnabled(ui->textEdit->canPaste());
      }
      
      /**
       * @description 当选中的文本变化时,工具栏的加粗、倾斜、下划线等按钮与文本样式一致
       * @brief MainWindow::on_textEdit_selectionChanged
       */
      void MainWindow::on_textEdit_selectionChanged()
      {
          QTextCharFormat format = ui->textEdit->currentCharFormat();
          ui->actBold->setChecked(format.font().bold());
          ui->actItalic->setChecked(format.fontItalic());
          ui->actUnderline->setChecked(format.fontUnderline());
      }
      
      /**
       * @description 字号框大小改变时,修改选中的文本字号
       * @brief MainWindow::on_spinBox_valueChanged
       * @param fontSize
       */
      void MainWindow::on_spinBox_valueChanged(int fontSize)
      {
          QTextCharFormat format;
          format.setFontPointSize(fontSize);
          ui->textEdit->mergeCurrentCharFormat(format);
          processBar->setValue(fontSize);
      }
      
      /**
       * @description 字体选择框改变时,设置字体
       * @brief MainWindow::on_fontComboBox_indexChanged
       * @param fontStyle
       */
      void MainWindow::on_fontComboBox_indexChanged(const QString &fontStyle)
      {
          QTextCharFormat format;
          format.setFontFamily(fontStyle);
          ui->textEdit->mergeCurrentCharFormat(format);//mergeCurrentCharFormat这会保留原本字体的其他风格,尤其是文本的字号或者风格不一样时,将会显示效果
      }
      
  • 相关阅读:
    python自动华 (十二)
    python自动华 (十一)
    python自动华 (十)
    python自动华 (八)
    python自动华 (九)
    python自动华 (七)
    python自动华 (六)
    数据
    页面自适应
    判断是否移动端
  • 原文地址:https://www.cnblogs.com/echo-lovely/p/16215771.html
Copyright © 2020-2023  润新知