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_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);
}