QT系列之混合方式UI设计【最常用】

最终效果图:

 

代码:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QProgressBar>
#include<QLabel>
#include<QFontComboBox>
#include<QSpinBox>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QLabel *fLabCurFile;
QProgressBar *progressBar;
QSpinBox *spinFontSize;
QFontComboBox *comboFont;
void initUI();
void iniSignalSlots();
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_actBold_triggered(bool checked);
void on_acttalic_triggered(bool checked);
void on_actUnderline_triggered(bool checked);
void on_textEdit_copyAvailable(bool b);
void on_textEdit_selectionChanged();
void on_spinBoxFontSize_valueChanged(int aFontSize);
void on_comboFont_currentIndexChanged(const QString &arg1);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
void MainWindow::initUI()
{
fLabCurFile = new QLabel;
fLabCurFile->setMidLineWidth(150);//最小宽度
fLabCurFile->setText("当前文件:");
ui->statusbar->addWidget((fLabCurFile));
progressBar = new QProgressBar;
progressBar->setMinimum(5);
progressBar->setMaximum(50);
progressBar->setValue(ui->textEdit->font().pointSize());
ui->statusbar->addWidget(progressBar);
spinFontSize = new QSpinBox;
spinFontSize->setMinimum(5);
spinFontSize->setMaximum(50);
ui->toolBar->addWidget(new QLabel("字体大小"));
ui->toolBar->addWidget(spinFontSize);
comboFont = new QFontComboBox;
comboFont->setMinimumWidth(5);
comboFont->setMaximumWidth(50);
ui->toolBar->addWidget(new QLabel("字体"));
ui->toolBar->addWidget(comboFont);
}
void MainWindow::iniSignalSlots()
{
connect(spinFontSize,SIGNAL(valueChanged(int)),
this,SLOT(on_spinBoxFontSize_valueChanged(int)));
connect(comboFont,SIGNAL(currentIndexChanged(const QString&)),
this,SLOT(on_comboFont_currentIndexChanged(const QString&)));
}
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
initUI();
iniSignalSlots();
setCentralWidget(ui->textEdit);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actBold_triggered(bool checked)
{
QTextCharFormat fmt;
//fmt = ui->textEdit->currentCharFormat(); //可以省略
if(checked)
fmt.setFontWeight(QFont::Bold);
else
fmt.setFontWeight(QFont::Normal);
ui->textEdit->mergeCurrentCharFormat(fmt);
}
void MainWindow::on_acttalic_triggered(bool checked)
{
QTextCharFormat fmt;
//fmt = ui->textEdit->currentCharFormat(); //可以省略
if(checked)
fmt.setFontItalic(QFont::StyleItalic);
else
fmt.setFontItalic(QFont::Normal);
ui->textEdit->mergeCurrentCharFormat(fmt);
}
void MainWindow::on_actUnderline_triggered(bool checked)
{
QTextCharFormat fmt;
//fmt = ui->textEdit->currentCharFormat(); //可以省略
if(checked)
fmt.setFontUnderline(QFont::UnderlineResolved);
else
fmt.setFontItalic(QFont::Normal);
ui->textEdit->mergeCurrentCharFormat(fmt);
}
//当选中文本时,才可以复制 剪切动作
void MainWindow::on_textEdit_copyAvailable(bool b)
{
ui->actcut->setEnabled(b);
ui->actcopy->setEnabled(b);
ui->actpaste->setEnabled(ui->textEdit->canPaste());
}
//当选中文本时,可以看到文字的状态,是否加粗 是否倾斜 是否具有下划线
void MainWindow::on_textEdit_selectionChanged()
{
QTextCharFormat fmt;
fmt=ui->textEdit->currentCharFormat();
ui->acttalic->setChecked(fmt.fontItalic());
ui->actBold->setChecked(fmt.font().bold());
ui->actUnderline->setChecked(fmt.fontUnderline());
}
void MainWindow::on_spinBoxFontSize_valueChanged(int aFontSize)
{
QTextCharFormat fmt;
fmt.setFontPointSize(aFontSize);//选中的文字设置
ui->textEdit->mergeCurrentCharFormat(fmt); //融合
progressBar ->setValue(aFontSize);
}
void MainWindow::on_comboFont_currentIndexChanged(const QString &arg1)
{
QTextCharFormat fmt;
fmt.setFontFamily(arg1);
ui->textEdit->mergeCurrentCharFormat(fmt);
}

 

posted @   江南王小帅  阅读(331)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示