这一节说一些理论的东西吧,聊一聊这QT的一个重要组成部分,那就是信号和槽。这个机制可以再对象之间并不了解的情况下将他们的行为联系起来。前面的几篇文章中已经用到过连接信号和槽了,声明控件自己的信号和槽,并实现了槽函数,发送信号。现在咱再聊聊这个机制。
槽的话,大家可以看成一个成员函数(其实和成员函数不一样,这样说为了初学者容易理解),可以使虚函数,可以被重载。可以定义为公有,可以为私有,也可以为保护。它可以像C++的成员函数一样被调用,可以传递任何类型的参数。注意的是,槽函数能和一个信号连接,只要信号发出,这个槽函数会自动调用。
看看语法吧,connect语法:
connect(sender,SIGNAL(signal),receiver,SLOT(slot));
其中sender和receiver是QObject对象指针。还有一些要注意的是,一个信号可以连接到多个槽,多个信号可以连接一个槽,一个信号可以和另一个信号连接。
1、一个信号可以连接到多个槽
connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));
connect(slider,SIGNAL(valueChanged(int)),this,SLOT(updataStatusBarIndicator(int)));
2、多个信号可以连接一个槽
connect(lcd,SIGNAL(overflow()),this,SLOT(handleMathError));
connect(calculator,SIGNAL(divisionByZero(),this,SLOT(handleMathError)));
3、一个信号和另一个信号连接
connect(lineEdit,SIGNAL(textChanged(const QString &)),this,SIGNAL(updateTecord(const QString &)));
好吧,今天就少说一点吧!
昨天我女朋友看了我的文章,和我说了一句:你这样写文章,不深入!哎呀,这句话把我说的那可这是有点杯具啊!不过,说得好,一句挫中了我写文章的缺点,最后我只想说一句:老婆大人威武(开玩笑啦)!好,吸取教训,以后的文章争取给大家说的详细一些,毕竟我现在还是一个大二的学生,能力有限,还望大家谅解,不过我会尽力把我知道的东西,尽量的抖出来!
好了,又说了定废话,进入主题吧。今天咱说说QT的2D绘图。这就说到QT的一个类QPainter了。QPainter可以绘制从简单的直线到像饼图和弦这样的复杂形状。它也可以绘制排列的文本和像素映射。大概有个这样的理解就行了,对于一个初学者来说。另外,如果大家想具体了解一下的话,查一下API就OK了!
绘图工具的典型用法:1、构造一个绘图工具。2、设置画笔和画刷等。3、绘制。4、销毁这个绘图工具。
接下来咱做一个实例吧,怎么用QPainter这个类画一些简单的东西。
首先定义一个组件:
class PaintedWidget : public QWidget
{
public:
PaintedWidget();
protected:
void paintEvent(QPaintEvent *event);
};
然后在构造函数中定义一下PaintedWidget的大小和title,没什么好说的:
PaintedWidget::PaintedWidget()
{
resize(800,600);
setWindowTitle(tr("PaintDemo"));
}
接下来就是来实现paintEvent函数了:
void PaintedWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawLine(80,100, 650, 500);
painter.setPen(Qt::red);
painter.drawRect(10,10, 100, 400);
painter.setPen(QPen(Qt::green,5));
painter.setBrush(Qt::blue);
painter.drawEllipse(50,150, 400, 200);
}
加上主函数:
int main(int argc,
char *argv[])
{
QApplicationapp(argc, argv);
PaintedWidget w;
w.show();
return app.exec();
}
然后看看把这些东西连起来的代码吧:
#include <QApplication>
#include <QWidget>
#include <QPen>
#include <QPainter>
class PaintedWidget : public QWidget
{
public:
PaintedWidget();
protected:
void paintEvent(QPaintEvent *event);
};
PaintedWidget::PaintedWidget()
{
resize(800,600);
setWindowTitle(tr("Paint Demo"));
}
void PaintedWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawLine(80, 100, 650, 500);
painter.setPen(Qt::red);
painter.drawRect(10, 10, 100, 400);
painter.setPen(QPen(Qt::green, 5));
painter.setBrush(Qt::blue);
painter.drawEllipse(50, 150, 400, 200);
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
PaintedWidget w;
w.show();
return app.exec();
}运行的效果如下:
一般 资源库 是隐藏的 ,我们需要把隐藏的文佳显示
然后我们打印一下路径,根据打印的路径,我们可以很快的找到我们需要的文件夹。
Users/iLove/Library/Application Support/iPhone Simulator/6.1/Applications/74DE52C9-633B-4F10-A03B-52F602B593BE/RegisterInterface.app/love.png
我们根据这个路径,在finder中找就是了。