Qt(四)使用代码与UI文件混合开发

本文详细介绍了使用Qt进行UI设计和代码开发的过程。首先,展示了如何创建和设计用户界面,包括添加控件如进度条、字体选择框等。接着,通过信号与槽函数将操作与功能函数关联。然后,提供了mainwindow.h和mainwindow.cpp的代码实现,涉及字体大小和样式的设置。最后,提及了如何为应用添加图标以及遇到的问题,如工具栏图标不显示的解决方案。
摘要由CSDN通过智能技术生成

一、UI设计

新建项目,主要选项如下图:一个MainWindow,带ui文件。
在这里插入图片描述
初步Ui设计
在这里插入图片描述
信号与槽函数:将上面的操作行为映射至槽函数来执行操作。
在这里插入图片描述

二、代码开发

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>
#include <QProgressBar>  // 进度条
#include <QSpinBox>      // 字体大小设置框
#include <QFontComboBox> //下拉字体选择

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 initSignalSlots();
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_actBold_triggered(bool checked);

    void on_textEdit_copyAvailable(bool b);

    void on_textEdit_selectionChanged();

    void on_spinBoxFontSize_valueChange(int aFontSize);
    void on_comboFont_currentIndexChanged(const QString &args1);

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMainWindow>




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;
    ui->toolBar->addWidget(new QLabel("字体"));
    ui->toolBar->addWidget(comboFont);

    setCentralWidget(ui->textEdit);
}

void MainWindow::initSignalSlots()
{
    connect(spinFontSize,
            SIGNAL(valueChanged(int)),
            this,
            SLOT(on_spinBoxFontSize_valueChange(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();
    initSignalSlots();
}

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


void MainWindow::on_actBold_triggered(bool checked)
{
    QTextCharFormat fmt;
    if(checked)
        fmt.setFontWeight(QFont::Bold);
    else
        fmt.setFontWeight(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->actItalic->setChecked(fmt.fontItalic());
    ui->actBold->setChecked(fmt.font().bold());
    ui->actUndelline->setChecked(fmt.fontUnderline());
}

void MainWindow::on_spinBoxFontSize_valueChange(int aFontSize)
{
    QTextCharFormat fmt;
    fmt.setFontPointSize(aFontSize);
    ui->textEdit->mergeCurrentCharFormat(fmt);
    progressBar->setValue(aFontSize);
}

void MainWindow::on_comboFont_currentIndexChanged(const QString &args1)
{
    QTextCharFormat fmt;
    fmt.setFontFamily(args1);
    ui->textEdit->mergeCurrentCharFormat(fmt);
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

为APP应用添加图标
在工程.pro同级文件夹中放入ico图像,并将文件名添加到.pro中,如下:

RC_ICONS = title.ico

效果演示:(未实现斜体与下划线功能)
在这里插入图片描述

工具栏编译不显示图标:https://blog.csdn.net/u013541325/article/details/102491336

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongpingWang

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值