1、混合方式UI设计
- 新建项目
- 添加静态资源
- 添加资源
- 添加action
- 添加菜单
- 菜单栏
- 工具栏
- 中间编辑区域
- 代码添加其他组件
- 字体和大小
- 状态栏
- 添加槽函数
- UI设置的
- 转到槽的
- 手写的
- 设置应用程序图标
- 代码
新建项目
- MainWindow代码文件夹
- 主窗口为 (QMainWindow)
添加静态资源
- AppIcon.ico
- 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_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic: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);// 状态栏上的labellabelCurFile = 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);elsefmt.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);}