QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1207|回复: 7

这个QT类的定义怎么看都没有错,但是运行结果不对(很简单的)

[复制链接]
发表于 2004-6-11 21:14:48 | 显示全部楼层 |阅读模式
定义头文件
[code:1]#ifndef MAINVIEW_H
#define MAINVIEW_H

#include <mainui.h>

class mainView : public mainui
{
public:
        mainView(QWidget *parent=0);

        ~mainView();
        void lookForHost(char hostName[]);   
public slots:
        virtual void slotStartClicked();       
};

#endif[/code:1]

cpp文件
[code:1]
#include "mainview.h"
#include "qmessagebox.h"
#include "qpushbutton.h"

mainView::mainView(QWidget *parent) : mainui(parent)
{
        connect(pushButton1, SIGNAL(clicked()), this, SLOT(slotStartClicked()) );
        connect(pushButton2, SIGNAL(clicked()), this, SLOT(slotStartClicked()));
        slotStartClicked();
}


mainView::~mainView()
{
}


void mainView::slotStartClicked()
{
        QMessageBox::warning(this, "Warning", "Just test");
}
[/code:1]

编译正确,运行时错误提示:
QObject::connect:  No such slot mainui::slotStartClicked()
QObject::connect: (sender name: 'pushButton1')
QObject::connect: (receiver name: 'Form1')

this指针怎么会指到父类mainui去啊
发表于 2004-6-12 12:17:43 | 显示全部楼层
不懂qt,帮你顶顶
回复

使用道具 举报

发表于 2004-6-13 19:45:04 | 显示全部楼层
兄弟,我现在看不出来,能不能把整个工程发给我,大家研究研究。
[email protected]
回复

使用道具 举报

发表于 2004-6-14 13:06:07 | 显示全部楼层
首先,在任何你使用了signal/slot的类声明的头一行都要写上
Q_OBJECT宏,

别往别的地方写,如果不想找麻烦:

在代码中
slots就是什么都没有,只是一个供moc用的标签
signals就是protectd

Qt源代码中是这样的:
#define slots
#define signals protected
所以,Qt中的signals是永远没有访问控制的,因为他就是protected.

然后,在任何你使用了slots和signals的头文件上运行moc,Meta Object Creator。

所以,本例的编译,
必须是:
moc a.h >a.moc
g++ -c a.moc -I/usr/lib/qt-<版本>/include
g++ -c a.cpp -I/usr/lib/qt-<>/include
g++ -o a *.o

signal/slot/moc的使用有很多注意事项,包括他们写的位置都是有限制的,比如:嵌入类就不能使用Q_OBJECT等等。
回复

使用道具 举报

 楼主| 发表于 2004-6-15 08:34:54 | 显示全部楼层
多谢各位指点,我又新建一个工程后,在主窗口类中直接用mainui创建对象,然后connect信号到主窗口对象中的slot函数中就行了。

楼上的,Q_OBJECT应当如何添加,在什么地方添加?
回复

使用道具 举报

发表于 2004-6-15 14:37:02 | 显示全部楼层
[code:1]
class AnalogClock : public QWidget                // analog clock widget
{
    Q_OBJECT
public:
    AnalogClock( QWidget *parent=0, const char *name=0 );
    void setAutoMask(bool b);
   
protected:
    void updateMask();
    void paintEvent( QPaintEvent *);
    void mousePressEvent( QMouseEvent *);
    void mouseMoveEvent( QMouseEvent *);
    void drawClock( QPainter* );
   
private slots:
    void timeout();

public slots:
    void setTime( const QTime & t );

private:
    QPoint clickPos;
    QTime time;
    QTimer *internalTimer;
};
[/code:1]
回复

使用道具 举报

发表于 2004-6-15 14:37:31 | 显示全部楼层
很基本的东西了
多看看文档和例子吧
回复

使用道具 举报

 楼主| 发表于 2004-6-15 14:51:46 | 显示全部楼层
哦,是了,成功的类里面的确是有这个定义的。多谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 03:01 , Processed in 0.036513 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表