本人刚开始学习QT,有一些C语言基础,了解一点点C++,以下是一个QT例子,其中有很多语言不懂,望高人指点~

文件ticker.h#ifndefTICKER_H#defineTICKER_H#include<QWidget>classTicker:publicQWidget{Q_... 文件ticker.h
#ifndef TICKER_H
#define TICKER_H

#include <QWidget>

class Ticker : public QWidget
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText)

public:
Ticker(QWidget *parent = 0);//为什么在括号内要有(QWidget *parent = 0)?看了很多例子在括号内都加上这样一句?
void setText(const QString &newText);
QString text() const { return myText; }
QSize sizeHint() const;
protected:
void paintEvent(QPaintEvent *event);//(QPaintEvent *event)又是什么意思?定义了event一个指针?如果说定义一个event指针那为什么下面三句又定义了event指针?
void timerEvent(QTimerEvent *event);
void showEvent(QShowEvent *event);
void hideEvent(QHideEvent *event);

private:
QString myText;
int offset;
int myTimerId;
};

#endif
ticker.cpp文件
#include <QtGui>
#include "ticker.h"

Ticker::Ticker(QWidget *parent) : QWidget(parent)//前一个ticker指的是类,第二个ticker是成员函数还是?,那后面的两个括号内指的是什么?
{
offset = 0;
myTimerId = 0;
}

void Ticker::setText(const QString &newText)
{
myText = newText;
update();
updateGeometry();
}

QSize Ticker::sizeHint() const
{
return fontMetrics().size(0, text());
}

void Ticker::paintEvent(QPaintEvent * /* event */)//定义类和成员函数,括号内又是干什么的?
{
QPainter painter(this);

int textWidth = fontMetrics().width(text());
if (textWidth < 1)
return;
int x = -offset;
while (x < width()) {
painter.drawText(x, 0, textWidth, height(),
Qt::AlignLeft | Qt::AlignVCenter, text());
x += textWidth;
}
}

void Ticker::showEvent(QShowEvent * /* event */)//定义类和成员函数?括号内又是干什么的?是否可以将QShowEvent *换成QShowEvent * event ?
{
myTimerId = startTimer(30);
}

void Ticker::timerEvent(QTimerEvent *event)//定义类和成员函数?括号内又是干什么的?
{
if (event->timerId() == myTimerId) {
++offset;
if (offset >= fontMetrics().width(text()))
offset = 0;
scroll(-1, 0);
} else {
QWidget::timerEvent(event);//调用类和成员函数?括号内event怎么又没有*号了?
}
}

void Ticker::hideEvent(QHideEvent * /* event */)//同以上的event问题?
{
killTimer(myTimerId);
}
main.cpp文件
#include <QApplication>

#include "ticker.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Ticker ticker;
ticker.setWindowTitle(QObject::tr("Ticker"));
ticker.setText(QObject::tr("How long it lasted was impossible to "
"say ++ "));
ticker.show();
return app.exec();
}
问题都在语句后面的注释中,由于本人的基础较薄弱希望高人可以说的详细一点,
在qt中的例子都看到了上面说的继承后的parent问题?这是用于程序的框架还是什么?有的语句我查看了qt自带的帮助文档但看不大懂,还有在C++中是不是A::B后面指的都是A类的对象B?还是::前后可以都是类?或者可以指A类中的成员函数B?希望有高手来指点一下~~
展开
 我来答
紫翼魔狼
2011-05-11 · TA获得超过4344个赞
知道大有可为答主
回答量:1413
采纳率:42%
帮助的人:573万
展开全部
Ticker(QWidget *parent = 0);//为什么在括号内要有(QWidget *parent = 0)?
这是构造函数的参数。C++可以使用默认参数。其实写成iQWidget *parent = NULL;就是没有父窗口,就更容易理解了。

void paintEvent(QPaintEvent *event);//(QPaintEvent *event)又是什么意思?定义了event一个指针?如果说定义一个event指针那为什么下面三句又定义了event指针?
你这么问,应该是基础不好,C/C++的参数名是任意的,只要符合语法要求就可以,因此是可以相同的,这个只是函数的参数,而不是定义变量。三个event指针,是三个不同类型的事件指针,是三个函数的参数,不是定义变量。

Ticker::Ticker(QWidget *parent) : QWidget(parent)//前一个ticker指的是类,第二个ticker是成员函数还是?,那后面的两个括号内指的是什么?
第二个是构造函数,Ticker(QWidget *parent)是构造函数,QWidget *parent是构造函数的参数;
: QWidget(parent)是初始化列表的格式,你可以搜索一下 初始化列表 来查一下更具体的内容。

void Ticker::showEvent(QShowEvent * /* event */)//定义类和成员函数?括号内又是干什么的?是否可以将QShowEvent *换成QShowEvent * event ?
可以,函数定义的时候,是可以写参数,也可以不写,只简写参数的类型。

QWidget::timerEvent(event);//调用类和成员函数?括号内event怎么又没有*号了?
感觉你的基础真的不好,函数定义的时候,参数是要写类型的,所以那个*是表示指针类型。
而函数调用的时候,参数是指针类型的,就可以直接使用啊。如果不是指针,就用取地址符号(&)转成地址(指针就是地址)。
void paintEvent(QPaintEvent *event);//这样是定义,其实这么写更好一些
void paintEvent( QPaintEvent * event);//这个函数的参数是event,event的类型是QPaintEvent * 。感觉你的理解是这个函数的参数时 * event,而参数类型是QPaintEvent ,那样就错了。不知道你明白没有。

给你一些建议,因为你的基础看起来不是很好,建议看看谭浩强的《C++程序设计》等你完全理解这些问题了,再看看钱能的《C++程序设计》。再看国外的经典书。基础很重要,很重要。
审判者小可
2011-05-11 · 超过30用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:0
展开全部
你的问题好多,我挑几个来回答:
Ticker(QWidget *parent = 0);是Ticker的构造函数,parent是QWidget*类型的传入参数,这里默认为0,表示Ticker是一个独立的窗口,否则Ticker就是parent里面的子窗口。
void paintEvent(QPaintEvent *event);以及下面三个函数都是事件响应函数,paintEvent是窗口重绘函数,event在这几个函数里面是不同类型的参数,代表事件的信息。
A::B后面的B是A的成员。
剩下的问题都是C++类的基本概念问题,你可以看书解决。
从你提的问题看,你的C语言基础不怎么样,C++更是知之甚少。建议认真看下c++ primer等书,打好基础再来学Qt吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
777999666qhw
2011-05-11 · TA获得超过4871个赞
知道大有可为答主
回答量:5615
采纳率:25%
帮助的人:4668万
展开全部
都是c++基础语法,和QT无关,建议先看看c++语法.
c++的语法是很复杂的,不是随便看看就可以的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式