首页 > 其他分享 >qt的代码化UI设计(关注槽函数如何实现和GUI开发布局)

qt的代码化UI设计(关注槽函数如何实现和GUI开发布局)

时间:2022-08-16 14:15:45浏览次数:55  
标签:font qt QDWlgMannual GUI bool UI new txt void

1.项目结构


1.1 项目创建
创建一个基类为Dialog的,窗口类名为QWlgmannual,不带UI界面的项目

2.文件代码

2.1 ui_code_design.pro

// 导入QT的GUI核心库
QT       += core gui

// qtversion > 4:执行
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

// 使用c++11标准
CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
// 源文件
SOURCES += \
    main.cpp \
    qdwlgmannual.cpp
// 头文件
HEADERS += \
    qdwlgmannual.h

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

2.2 qdwlgmannual.h

#ifndef QDWLGMANNUAL_H
#define QDWLGMANNUAL_H

#include <QDialog>
#include <QCheckBox>
#include <QRadioButton>
#include <QPlainTextEdit>
#include <QPushButton>


class QDWlgMannual : public QDialog
{
    // 使用槽函数的宏
    Q_OBJECT

public:
    QDWlgMannual(QWidget *parent = nullptr);
    ~QDWlgMannual();

private:
    QCheckBox *underline,*italic,*bold;
    QRadioButton *black,*red,*blue;
    QPlainTextEdit *txt;
    QPushButton *ok,*cancel,*close;
    // UI创建与初始化
    void initUI();
    // 初始化信号和槽的连接
    void initSignalSlots();

// 槽函数声明
private slots:
    // 设置点击事件
    void on_underline(bool checked);
    void on_italic(bool checked);
    void on_bold(bool checked);
    // 设置字体颜色
    void setTextFontColor();
};
#endif // QDWLGMANNUAL_H

2.3 qwdlgmannual.cpp

#include "qdwlgmannual.h"
#include <QHBoxLayout>
#include <QVBoxLayout>

// 构造函数
QDWlgMannual::QDWlgMannual(QWidget *parent)
    : QDialog(parent)
{
    // UI界面布局和创建
    initUI();
    // 信号和槽函数的关联
    initSignalSlots();
    setWindowTitle("Form created mannualy");
}
// 析构函数,释放指针
QDWlgMannual::~QDWlgMannual()
{
    delete underline;
    delete italic;
    delete bold;
    delete black;
    delete red;
    delete blue;
    delete txt;
    delete ok;
    delete cancel;
    delete close;
}
// UI界面组件创建和布局,以及属性设置
void QDWlgMannual::initUI(){
    // 创建underline,italic,bold 3个QCheckBox,并设置水平布局
    underline = new QCheckBox(tr("underline"));
    italic = new QCheckBox(tr("italic"));
    bold = new QCheckBox(tr("bold"));
    QHBoxLayout *l1_font = new QHBoxLayout;
    l1_font->addWidget(underline);
    l1_font->addWidget(italic);
    l1_font->addWidget(bold);
    // 创建black,red,blue 3个QRadioButton,并设置水平布局
    black = new QRadioButton(tr("black"));
    red = new QRadioButton(tr("red"));
    blue = new QRadioButton(tr("blue"));
    QHBoxLayout *l2_font_color = new QHBoxLayout;
    l2_font_color->addWidget(black);
    l2_font_color->addWidget(red);
    l2_font_color->addWidget(blue);
    // 创建确定,取消,退出 3个QPushButton,并水平布局
    ok = new QPushButton(tr("ok"));
    cancel = new QPushButton(tr("cancel"));
    close = new QPushButton(tr("close"));
    QHBoxLayout *l3_button = new QHBoxLayout;
    l3_button->addWidget(ok);
    l3_button->addWidget(cancel);
    l3_button->addWidget(close);
    // 创建文本框,并设置初始字体
    txt = new QPlainTextEdit;
    txt->setPlainText("Hello World\n\nIt is my demo");
    QFont font = txt->font();  // 获取txt的字体对象
    font.setPointSize(20);     // 设置font的字体大小
    txt->setFont(font);        // 设置txt的字体
    // 创建垂直布局,并设置主界面布局为垂直布局
    QVBoxLayout *l4_main = new QVBoxLayout;
    l4_main->addLayout(l1_font); // 添加字体类型组
    l4_main->addLayout(l2_font_color); // 添加字体颜色组
    l4_main->addWidget(txt);        // 添加txt文本输入框
    l4_main->addLayout(l3_button);  // 添加按钮组
    // 设置主窗口布局为垂直布局
    setLayout(l4_main);
}
// 信号和槽函数关联
void QDWlgMannual::initSignalSlots(){
    // 3个字体设置的 QCheckBox的clicked()信号和相应的槽函数关联
    connect(underline,SIGNAL(clicked(bool)),this,SLOT(on_underline(bool)));
    connect(italic,SIGNAL(clicked(bool)),this,SLOT(on_italic(bool)));
    connect(bold,SIGNAL(clicked(bool)),this,SLOT(on_bold(bool)));
    // 3个颜色QRadioButton的clicked()信号和setTextFontColor()槽函数关联
    connect(black,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
    connect(red,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
    connect(blue,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
    // 3个按钮的信号和窗体的槽函数关联
    connect(ok,SIGNAL(clicked()),this,SLOT(accept()));
    connect(cancel,SIGNAL(clicked()),this,SLOT(reject()));
    connect(close,SIGNAL(clicked()),this,SLOT(close()));
}

// 槽函数实现
void QDWlgMannual::on_underline(bool checked){
    QFont font = txt->font();
    font.setUnderline(checked);
    txt->setFont(font);
}
void QDWlgMannual::on_italic(bool checked){
    QFont font = txt->font();
    font.setItalic(checked);
    txt->setFont(font);
}
void QDWlgMannual::on_bold(bool checked){
    QFont font = txt->font();
    font.setBold(checked);
    txt->setFont(font);
}

// 设置文字颜色的槽函数
void QDWlgMannual::setTextFontColor(){
    QPalette plet = txt->palette();
    if(black->isChecked())
        plet.setColor(QPalette::Text,Qt::black);
    else if(red->isChecked())
        plet.setColor(QPalette::Text,Qt::red);
    else if(blue->isChecked())
        plet.setColor(QPalette::Text,Qt::blue);
    else
        plet.setColor(QPalette::Text,Qt::yellow);
    txt->setPalette(plet);
}

2.4 主文件

#include "qdwlgmannual.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    // 创建一个应用程序对象
    QApplication a(argc, argv);
    // 创建一个对话框对象
    QDWlgMannual w;
    // 显示组件
    w.show();
    // 进入消息循环和事件等待
    return a.exec();
}

标签:font,qt,QDWlgMannual,GUI,bool,UI,new,txt,void
From: https://www.cnblogs.com/nanfengnan/p/16591331.html

相关文章

  • Qt 无法解析的外部符号“public: virtual struct QMetaObject const ...“
    1、问题描述[注]CheckBoxHeaderView是我自己的类名由于项目需要,要将QT类添加到VS对应工程中,通过项目右键添加该类的.h和.cpp文件,生成dll时候一直报错,无法解析的外部符号......
  • centos安装buildah指定版本1.19.6
    如果在k8s使用Containerd,而打包工具使用的是buildah,那么可能会遇到无法拉取镜像的问题,yum下载的buildah-1.11.6的版本是没有修复的,而1.11.7或1.19.6等已经修复的版本Fa......
  • Qt学习笔记6
    P19.资源文件添加P20.模态和非模态对话框创建P21.消息对话框P22.其他标准对话框(P19.资源文件添加)(创建了新项目)(这次创建时,Details里的Baseclass选的是QMai......
  • Qt 怎么检测鼠标在不在某个控件上
    方式一:事件过滤器//构造函数内:记得安装事件过滤器this->installEventFilter(this);boolMainWidget::eventFilter(QObject*obj,QEvent*event){ //判断部件 if......
  • 【ARKUI】HarmonyOS 如何设置桌面壁纸
    参考资料壁纸Context模块 api讲解wallpaper.setWallpapersetWallpaper(source:string|image.PixelMap,wallpaperType:WallpaperType):Promise将指定资源设置......
  • 【JAVA UI】abilitySlice或ability以Action方式跳转
    ​参考资料PageAbility基本概念【HarmonyOS】【JAVAUI】abilitySlice和ability跳转方式【HarmonyOS】【FAQ】鸿蒙问题合集4代码实现1、准备工作新建一个TwoAbilit......
  • nerdctl+buildkitd构建容器镜像
    搭建nerdctl+buildkitd环境: 安装nerdctl:wgethttps://github.com/containerd/nerdctl/releases/download/v0.22.0/nerdctl-0.22.0-linux-amd64.tar.gztar-zxvfne......
  • Qt中使用qDebug()打印中文有时会报错的解决方法
    选择菜单栏的“工具”->“选项”,在新窗口的“文本编辑器”->右侧“UTF-8BOM”选择“如果编码是UTF-8则添加”;之后qDebug打印出的中文不会报错,但是会乱码,这时候要用......
  • ExtJS - UI组件 - ButtonGroup
    更新记录转载请注明出处:https://www.cnblogs.com/cqpanda/p/16587354.html2022年8月16日发布。2022年8月13日从笔记迁移到博客。ExtJS教程汇总:https://www.cnblog......
  • ExtJS - UI组件 - Chart
    更新记录转载请注明出处:https://www.cnblogs.com/cqpanda/p/16587398.html2022年8月16日发布。2022年8月13日从笔记迁移到博客。ExtJS教程汇总:https://www.cnblog......