dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QCheckBox>
#include <QRadioButton>
#include <QPlainTextEdit>
#include <QPushButton>
//#include <QVBoxLayout>
class Dialog : public QDialog
{
Q_OBJECT
private:
QCheckBox *chkBoxUnder;//字体名
QCheckBox *chkBoxItalic;
QCheckBox *chkBoxBold;
QRadioButton *radioBlack;//字体颜色
QRadioButton *radioRed;
QRadioButton *radioBlue;
QPlainTextEdit *txtEdit;//文字栏
QPushButton *btnOK;//确定键
QPushButton *btnCancel;//取消键
QPushButton *btnClose;//关闭键
void iniUI(); //UI创建与初始化
void iniSignalSlots(); //初始化信号与槽的链接
private slots:
void do_chkBoxUnder(bool checked); //Underline
void do_chkBoxItalic(bool checked); //Italic
void do_chkBoxBold(bool checked); //Bold
void do_setFontColor(); //设置文字颜色
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
void Dialog::iniUI()
{
//创建 Underline, Italic, Bold三个CheckBox,并水平布局
chkBoxUnder=new QCheckBox("Underline");
chkBoxItalic=new QCheckBox("Italic");
chkBoxBold=new QCheckBox("Bold");
QHBoxLayout *HLay1=new QHBoxLayout();
HLay1->addWidget(chkBoxUnder);
HLay1->addWidget(chkBoxItalic);
HLay1->addWidget(chkBoxBold);
//创建 Black, Red, Blue三个RadioButton,并水平布局
radioBlack=new QRadioButton("Black");
radioBlack->setChecked(true); //缺省被选中
radioRed=new QRadioButton("Red");
radioBlue=new QRadioButton("Blue");
QHBoxLayout *HLay2=new QHBoxLayout;
HLay2->addWidget(radioBlack);
HLay2->addWidget(radioRed);
HLay2->addWidget(radioBlue);
//创建 确定, 取消, 退出 三个 PushButton, 并水平布局
btnOK=new QPushButton("确定");
btnCancel=new QPushButton("取消");
btnClose=new QPushButton("退出");
QHBoxLayout *HLay3=new QHBoxLayout;
//HLay3->addStretch();
HLay3->addWidget(btnOK);
HLay3->addWidget(btnCancel);
//HLay3->addStretch();
HLay3->addWidget(btnClose);
//创建 文本框,并设置初始字体
txtEdit=new QPlainTextEdit;
txtEdit->setPlainText("Hello world\n手工创建");
QFont font=txtEdit->font(); //获取字体
font.setPointSize(20); //修改字体大小为20
txtEdit->setFont(font); //设置字体
//创建 垂直布局,并设置为主布局
// VLay=new QVBoxLayout(this);
QVBoxLayout *VLay=new QVBoxLayout(this);
VLay->addLayout(HLay1); //添加字体类型组,不添加就看不到了,因为这里没有ui文件
VLay->addLayout(HLay2); //添加字体颜色组
VLay->addWidget(txtEdit); //添加PlainTextEdit
VLay->addLayout(HLay3); //添加按键组
//setLayout(VLay); //设置为窗口的主布局,在这里注释掉不影响效果
}
void Dialog::iniSignalSlots()
{
//三个设置颜色的 QRadioButton
connect(radioBlue,SIGNAL(clicked()),this,SLOT(do_setFontColor()));
connect(radioRed,SIGNAL(clicked()),this,SLOT(do_setFontColor()));
connect(radioBlack,SIGNAL(clicked()),this,SLOT(do_setFontColor()));
//三个设置字体的 QCheckBox
connect(chkBoxUnder,SIGNAL(clicked(bool)),this,SLOT(do_chkBoxUnder(bool)));
connect(chkBoxItalic,SIGNAL(clicked(bool)),this,SLOT(do_chkBoxItalic(bool)));
connect(chkBoxBold,SIGNAL(clicked(bool)),this,SLOT(do_chkBoxBold(bool)));
//在Qt中,clicked(bool)是一个信号,用于表明复选框(CheckBox)或其他可切换开关类型的控件的状态是否发生了改变。
//具体来说,当复选框被选中或取消选中时,会发出clicked信号。信号的参数是一个布尔值,指示复选框当前是否被选中。
//三个按钮与窗口的槽函数关联
connect(btnOK,SIGNAL(clicked()),this,SLOT(accept()));
connect(btnCancel,SIGNAL(clicked()),this,SLOT(reject()));
connect(btnClose,SIGNAL(clicked()),this,SLOT(close()));
}
void Dialog::do_chkBoxUnder(bool a)//bool类只要有个东西在这里就行,不在乎是不是写的check
{
QFont font=txtEdit->font();// 创建一个 QFont 类型的对象 'font',并使其等于 'txtEdit' 对象的字体。'txtEdit' 可能是一个 QTextEdit 或 QPlainTextEdit 类的对象。
font.setUnderline(a); // 根据 'checked' 参数设置字体是否应有下划线。如果 'checked' 为真,则字体将带有下划线。
txtEdit->setFont(font);// 将 'txtEdit' 对象的字体设置为我们刚刚修改过的 'font'。这将会在 'txtEdit' 中显示带有 (或不带) 下划线的文本,取决于 'checked' 的值。
}//setUnderline()函数用于将指定的文本或文本区域设置为下划线状态。这个函数接受一个布尔值参数,通常用于指定是否要在给定文本或文本区域中添加下划线。
void Dialog::do_chkBoxItalic(bool checked)
{
QFont font=txtEdit->font();
font.setItalic(checked);
txtEdit->setFont(font);
}
void Dialog::do_chkBoxBold(bool checked)
{
QFont font=txtEdit->font();
font.setBold(checked);
txtEdit->setFont(font);
}
// 定义一个名为 'do_setFontColor' 的方法,该方法属于 'Dialog' 类。
void Dialog::do_setFontColor()
{
// 创建一个 QPalette 类型的对象 'plet',并使其等于 'txtEdit' 对象的调色板。'txtEdit' 可能是一个 QTextEdit 或 QPlainTextEdit 类的对象。
QPalette plet=txtEdit->palette();
// 如果 'radioBlue' 对象(可能是 QRadioButton 或 QCheckBox 对象)被选中,则将文本颜色设置为蓝色。
if (radioBlue->isChecked()) //isChecked()函数通常用于判断一个复选框或单选按钮是否被选中。它返回一个布尔值,如果选项被选中,那么返回True,否则返回False。
plet.setColor(QPalette::Text,Qt::blue);
// 如果 'radioBlue' 对象未被选中,并且 'radioRed' 对象(可能是 QRadioButton 或 QCheckBox 对象)被选中,则将文本颜色设置为红色。
else if (radioRed->isChecked())
plet.setColor(QPalette::Text,Qt::red);
// 如果 'radioBlue' 和 'radioRed' 对象均未被选中,并且 'radioBlack' 对象(可能是 QRadioButton 或 QCheckBox 对象)被选中,则将文本颜色设置为黑色。
else if (radioBlack->isChecked())
plet.setColor(QPalette::Text,Qt::black);
// 如果上述所有条件都不满足(例如,如果没有任何一个单选按钮被选中),则默认将文本颜色设置为黑色。
else
plet.setColor(QPalette::Text,Qt::black);
// 将 'txtEdit' 对象的调色板设置为我们刚刚修改过的 'plet'。这将会在 'txtEdit' 中显示相应颜色的文本。
txtEdit->setPalette(plet);
}
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
iniUI(); //界面创建与布局
iniSignalSlots(); //信号与槽的关联
setWindowTitle("手工创建UI"); //设置窗口标题
}
Dialog::~Dialog()
{
}