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