1、混合方式UI设计

发布时间:2023年12月18日

新建项目

  1. MainWindow代码文件夹
  2. 主窗口为 (QMainWindow)

添加静态资源

  1. AppIcon.ico
  2. images下的所有图标

添加资源

项目名称->右键->add new->qt->qt resource file->名称随便写
生成一个xx.qrc文件

  • 前缀为 /
  • 等修改时,直接右键qrc文件->添加现有文件
  • images和Application.ico同目录

添加action

  • xx.ui文件
  • 下方有一个action editor工具栏
  • 位置:控件 - 试图 - action editor
  • 新建action*(第一个按钮)
1. 文本(显示的名字):新建
2. 对象名称:actNew
3. tooltip(光标在的提示):新建
4. checkabled:选中状态,比如选中为粗体,不选中则不是粗体
5. shortcut:快捷键  ctl+n

以此类推

添加菜单

右边mainwindow中有两个对象:menubar和statusbar 菜单栏和状态栏
菜单栏只有一个
工具栏toolbar可以有多个

1. windowTitle:混合方式设计主窗口

菜单栏

文件:新建、打开、分隔符、退出
编辑:剪切、赋值、粘贴、清空
格式:斜体、粗体、下划线
查看:工具栏、状态栏
帮助:关于

在xx.ui中,左上角有一个在这里输入
这里会在menubar下添加子对象

输入汉字:文件 
后回车
依次输入  文件、编辑、格式、查看、帮助

将预创建的action,选中拖到指定的菜单栏中,上面出现红线,鼠标出现加号即可
会在menubar下的子对象生成子对象

工具栏

窗口右键 - 添加工具栏

还是将action拖拽过去,出现红色竖线

中间编辑区域

QTextEditor

代码添加其他组件

字体和大小

QLabel
QSpinBox
QFontLambox

头文件

#include <QLabel>
#include <QSpinBox>
#include <QFontComboBox>

private:
    void initUI();//声明初始化UI的函数
    QLabel* labelCurFile;//状态栏的当前文件
    QSpinBox* spinFontSize;//工具栏 选择字体大小
    QFontComboBox* fCmbFont;//工具栏 字体选择下拉菜单

状态栏

添加槽函数

UI设置的

最下方有一个signals_slots editor工具栏,可以图形化设置

转到槽的

在下方action editer 选中一个action,右键转到槽
粗体、斜体、下划线 选择代bool参数的triggered(bool)

textEditor 右键转到槽,选中内容变化

手写的

设置应用程序图标

打开pro文件 尾部追加

RC_ICONS = AppIcon.ico

或者
ui中windowsIcon选择文件

代码

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

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

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private:
    void initUI();
private slots:
    // 自定义槽函数
    void onSpinFontsizeValueChanged(int fontSize);
    void onFCmbFontCurrentIndexChanged(const QString& font);
    void on_actFontBold_triggered(bool checked);

    void on_actFontItalic_triggered(bool checked);

    void on_actFontUnderline_triggered(bool checked);

    void on_textEdit_selectionChanged();

    void on_textEdit_copyAvailable(bool b);

    void on_actToolbar_triggered(bool checked);

    void on_actStatusBar_triggered(bool checked);

    void on_actAbout_triggered();

private:
    Ui::MainWindow *ui;
    QLabel* labelCurFile;//状态栏的当前文件
    QSpinBox* spinFontsize;//工具栏 选择字体大小
    QFontComboBox* fCmbFont;//工具栏 字体选择下拉菜单
};
#endif // MAINWINDOW_H

.cpp

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

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setCentralWidget(ui->textEdit);//设置为主窗口的中心框架
    initUI();

    // 信号和槽函数的连接
    connect(spinFontsize,SIGNAL(valueChanged(int)), this, SLOT(onSpinFontsizeValueChanged(int)));//字体大小值变化
    connect(fCmbFont,SIGNAL(currentIndexChanged(QString)), this, SLOT(onFCmbFontCurrentIndexChanged(QString)));//字体当前编号变化
}

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

void MainWindow::initUI(){
    ui->actCut->setEnabled(false);
    ui->actCopy->setEnabled(false);
    ui->actPaste->setEnabled(false);

    // 状态栏上的label
    labelCurFile = new QLabel("当前文件:");
    labelCurFile->setMinimumWidth(350);
    ui->statusbar->addWidget(labelCurFile); // 添加到状态栏

    // 工具栏
    // 选择字体大小的选值框
    spinFontsize = new QSpinBox;
    spinFontsize->setRange(8,50); // 设置字号的取值范围
    spinFontsize->setValue(ui->textEdit->font().pointSize());
    spinFontsize->setMinimumWidth(50);
    spinFontsize->setMaximumWidth(80);
    // 选择字体的下拉列表
    fCmbFont = new QFontComboBox;
    fCmbFont->setMinimumWidth(150);
    // 将控件添加到工具栏
    ui->toolBar->addWidget(new QLabel("  字体大小:"));
    ui->toolBar->addWidget(spinFontsize);
    ui->toolBar->addWidget(new QLabel("  字体:"));
    ui->toolBar->addWidget(fCmbFont);

    ui->actToolbar->setChecked(true);
    ui->actStatusBar->setChecked(true);
}
// "粗体"
void MainWindow::on_actFontBold_triggered(bool checked)
{
    QTextCharFormat fmt;
    if(checked)
        fmt.setFontWeight(QFont::Bold);
    else
        fmt.setFontWeight(QFont::Normal);
    ui->textEdit->mergeCurrentCharFormat(fmt);
}
// "斜体"
void MainWindow::on_actFontItalic_triggered(bool checked)
{
    QTextCharFormat fmt;
    fmt.setFontItalic(checked);
    ui->textEdit->mergeCurrentCharFormat(fmt);
}
// "下划线"
void MainWindow::on_actFontUnderline_triggered(bool checked)
{
    QTextCharFormat fmt;
    fmt.setFontUnderline(checked);
    ui->textEdit->mergeCurrentCharFormat(fmt);
}
// 更新 粗体、斜体、下滑线 三个按钮的 checked属性
void MainWindow::on_textEdit_selectionChanged()
{
    QTextCharFormat fmt;
    fmt = ui->textEdit->currentCharFormat();
    ui->actFontBold->setChecked(fmt.font().bold());   // "粗体"是否选中
    ui->actFontItalic->setChecked(fmt.fontItalic());  // "斜体"是否选中
    ui->actFontUnderline->setChecked(fmt.fontUnderline()); // "下划线"是否选中
    spinFontsize->setValue(ui->textEdit->currentFont().pointSize()); // 字号
    fCmbFont->setCurrentText(fmt.fontFamily()); // 字体
}
// 更新 cut、copy、paste的 enabled属性  释放可复制
void MainWindow::on_textEdit_copyAvailable(bool b)
{
    ui->actCut->setEnabled(b);
    ui->actCopy->setEnabled(b);
    ui->actPaste->setEnabled(ui->textEdit->canPaste());
}

void MainWindow::on_actToolbar_triggered(bool checked)
{
    ui->toolBar->setHidden(!checked);
}

void MainWindow::on_actStatusBar_triggered(bool checked)
{
    ui->statusbar->setHidden(!checked);
}

void MainWindow::on_actAbout_triggered()
{
    QMessageBox::about(this,"关于","版本:1.0\n版权所有:问问啧啧啧");
}
// 改变字体大小
void MainWindow::onSpinFontsizeValueChanged(int fontSize)
{
    QTextCharFormat fmt;
    fmt.setFontPointSize(fontSize);  // 设置字体大小
    ui->textEdit->mergeCurrentCharFormat(fmt);
}
// 选择字体
void MainWindow::onFCmbFontCurrentIndexChanged(const QString& fontFamily)
{
    QTextCharFormat fmt;
    fmt = ui->textEdit->currentCharFormat();
    fmt.setFontFamily(fontFamily);
    ui->textEdit->mergeCurrentCharFormat(fmt);

//    QFont font;
//    font.setPointSizeF(pointSize);
//    font.setWeight(weight);
//    font.setItalic(isItalic);
//    font.setUnderline(fmt.fontUnderline());
//    ui->textEdit->setCurrentFont(font);


//    fmt = ui->textEdit->currentCharFormat();
//    double pointSize = fmt.fontPointSize();//字号
//    int weight = fmt.fontWeight();//是否加粗
//    bool isItalic = fmt.fontItalic();//是否斜体
//    QFont font(fontFamily,int(pointSize),weight,isItalic);
//    font.setUnderline(fmt.fontUnderline());
//    ui->textEdit->setCurrentFont(font);

}

在这里插入图片描述

文章来源:https://blog.csdn.net/Edu_enth/article/details/134936003
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。