QT提供了信号与槽机制用于完成界面操作的响应
信号:某种动作,例如点击,释放
槽:接受到特定动作后来进行处理的函数
//常用连接方式,
connect(object,SIGNAL(sign1),object2,SLOT(slot));
//同一个信号连多个槽
connect(object1,SIGNAL(sign1),object2,SLOT(slot1));
connect(object1,SIGNAL(sign1),object3,SLOT(slot2));
//同理,一个槽也可以连多个信号
connect(object1,SIGNAL(sign1),object3,SLOT(slot2));
connect(object1,SIGNAL(sign2),object3,SLOT(slot2));
优点:类型安全,松散耦合
例子:
.h文件
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void on_chkBoxItalic_clicked(bool checked);
void on_chkBoxBold_clicked(bool checked);
void on_chkBoxUnder_clicked(bool checked);
void setTextFontColor();
private:
Ui::Dialog *ui;
};
#endif // DIALOG_H
.cpp文件
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
connect(ui->rBtnBlue,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
connect(ui->rBtnRed,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
connect(ui->rBtnBlack,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_chkBoxItalic_clicked(bool checked)
{
QFont font=ui->txtEdit->font();
font.setItalic(checked);
ui->txtEdit->setFont(font);
}
void Dialog::on_chkBoxBold_clicked(bool checked)
{
QFont font=ui->txtEdit->font();
font.setBold(checked);
ui->txtEdit->setFont(font);
}
void Dialog::on_chkBoxUnder_clicked(bool checked)
{
QFont font=ui->txtEdit->font();
font.setUnderline(checked);
ui->txtEdit->setFont(font);
}
void Dialog::setTextFontColor()
{
QPalette plet=ui->txtEdit->palette();
if (ui->rBtnBlue->isChecked())
plet.setColor(QPalette::Text,Qt::blue);
else if (ui->rBtnRed->isChecked())
plet.setColor(QPalette::Text,Qt::red);
else if (ui->rBtnBlack->isChecked())
plet.setColor(QPalette::Text,Qt::black);
ui->txtEdit->setPalette(plet);
}