1:Qt文件的结构:
当用Qtcreater创建完一个文件后会得到三个文件分别是:
当用纯代码写界面的时候,dialog.h是用来预设一些界面的控件,和函数。
private:
//事先预设一些控件
QCheckBox *checkBoxUnderline;
QCheckBox *checkBoxItalic;
QCheckBox *checkBold;
QRadioButton *rBtnBlck;
QRadioButton *rBtnBlue;
QRadioButton *rBtnRed;
QPlainTextEdit *plainTetEdit;
QPushButton *btnok;
QPushButton *btncancel;
QPushButton *btnclose;
void iniUI();
void iniSignalSlot();
//预设一些信号的槽
private slots:
void on_checkUnderline(bool checked);
void on_checkItalic(bool checked);
void on_checkBold(bool checked);
void on_changeBlack();
当然也需要在头部文件加入一些引用文件
#include <QDialog>
#include<QRadioButton>
#include<QPushButton>
#include<QPlainTextEdit>
#include<QCheckBox>
参考关于private 和 public 两种类的区别:https://www.cnblogs.com/tsingke/p/10052445.html;
dialog.cpp是对界面的一个具体编辑和操作;
void Dialog::iniUI()
{
ui->setupUi(this);
this->resize(100,50);
this->setWindowTitle("Fuck You");
//比如checkBoxUnderline等,控件的名字是之前在dialog.h里面做过预设的。
checkBoxUnderline = new QCheckBox(tr("underline"));
checkBoxItalic = new QCheckBox(tr("Italic"));
checkBold = new QCheckBox(tr("Bold"));
//*设置一个横向的布局HLayout1*。
QHBoxLayout *HLayout1 = new QHBoxLayout;
//把这些控件加入到Widget.
HLayout1 ->addWidget(checkBoxUnderline);
HLayout1 ->addWidget(checkBoxItalic);
HLayout1 ->addWidget(checkBold);
rBtnBlck = new QRadioButton(tr("Black"));
rBtnBlue = new QRadioButton(tr("Blue"));
rBtnRed = new QRadioButton(tr("Red"));
QHBoxLayout *HLayout2 = new QHBoxLayout;
HLayout2 ->addWidget(rBtnBlck);
HLayout2 ->addWidget(rBtnBlue);
HLayout2 ->addWidget(rBtnRed);
plainTetEdit = new QPlainTextEdit();
QFont font = plainTetEdit->font();
font.setPointSize(20);
plainTetEdit->setFont(font);
plainTetEdit->setPlainText("hello world\n\nThis is new world!");
btnok = new QPushButton(tr("OK"));
btncancel = new QPushButton(tr("Cancel"));
btnclose = new QPushButton(tr("Close"));
QHBoxLayout *HLayout3 = new QHBoxLayout;
//加入一个弹簧的控件。
HLayout3->addStretch();
HLayout3 ->addWidget(btnok);
HLayout3->addStretch();
HLayout3 ->addWidget(btncancel);
HLayout3->addStretch();
HLayout3 ->addWidget(btnclose);
HLayout3->addStretch();
//设置一个控件的纵向的布局VLayout。
QVBoxLayout *VLayout = new QVBoxLayout;
//把布局的HLayout1等布局加入到VLayout。
VLayout->addLayout(HLayout1);
VLayout->addLayout(HLayout2);
VLayout->addWidget(plainTetEdit);
VLayout->addLayout(HLayout3);
setLayout(VLayout);
}
现在有了一些控件,下面就是需要对控件加一些信号和槽来让控件被点击或者操作后会有一定的反应。
//为了以后方便调用我们需要创建一个信号和槽的一个函数,这个函数iniSignalSlot()是之前在dialog.h中创建过的。
void Dialog::iniSignalSlot()
{
connect(btnok,SIGNAL(clicked()),this,SLOT(accept()));
connect(btncancel,SIGNAL(clicked()),this,SLOT(reject()));
connect(btnclose,SIGNAL(clicked()),this,SLOT(close()));
//这个里面的QCheckBox需要一个状态的bool值,这里需要特别的注意下。
connect(checkBoxUnderline,SIGNAL(clicked(bool)),this,SLOT(on_checkUnderline(bool)));
connect(checkBoxItalic,SIGNAL(clicked(bool)),this,SLOT(on_checkItalic(bool)));
connect(checkBold,SIGNAL(clicked(bool)),this,SLOT(on_checkBold(bool)));
connect(rBtnBlck,SIGNAL(clicked()),this,SLOT(on_changeBlack()));
connect(rBtnBlue,SIGNAL(clicked()),this,SLOT(on_changeBlack()));
connect(rBtnRed,SIGNAL(clicked()),this,SLOT(on_changeBlack()));
}
剩下的就是关于一些信号的函数的处理了。
void Dialog::on_checkUnderline(bool checked)
{
QFont font = plainTetEdit->font();
font.setUnderline(checked);
plainTetEdit->setFont(font);
}
void Dialog::on_checkItalic(bool checked)
{
QFont font = plainTetEdit->font();
font.setItalic(checked);
plainTetEdit->setFont(font);
}
void Dialog::on_checkBold(bool checked)
{
QFont font = plainTetEdit->font();
font.setBold(checked);
plainTetEdit->setFont(font);
}
void Dialog::on_changeBlack()
{
QPalette plate = plainTetEdit->palette();
if(rBtnBlck->isChecked())
plate.setColor(QPalette::Text,Qt::black);
else if(rBtnBlue->isChecked())
plate.setColor(QPalette::Text,Qt::blue);
else if(rBtnRed->isChecked())
plate.setColor(QPalette::Text,Qt::red);
else
plate.setColor(QPalette::Text,Qt::black);
plainTetEdit->setPalette(plate);
}
之后运行编译一下就会有下面的结果。