• 5860阅读
  • 9回复

没有这个函数? [复制链接]

上一主题 下一主题
离线shifan
 
只看楼主 倒序阅读 楼主  发表于: 2009-07-29
///////////////////////Hello_world.cpp

#include<qapplication.h>
#include"my_widget.h"

int main(int argc,char **argv)
{
    QApplication a(argc,argv);

    my_widget w;
    a.setMainWidget(&w);
    w.show();
    return a.exec();
}

////////////////////////my_widget.cpp

#include<qwidget.h>
#include"my_widget.h"
#include<qpushbutton.h>
#include<qmainwindow.h>

my_widget::my_widget(QWidget *parent,const char *name)
    :QWidgetStack(parent,name)
{
one=new QPushButton(parent,"one");
two=new QMainWindow(0,"two",WType_TopLevel);
addWidget(one,1);
addWidget(two,2);
emit aboutToShow(1);
connect(one,SIGNAL(clicked()),this,SLOT(raiseWidget(id(two))));
}

////////////////////////my_widget.h

#ifndef TRACK
#define TRACK
#include<qwidget.h>
#include<qwidgetstack.h>

class QPushButton;
class QMainWindow;

class my_widget:public QWidgetStack
//The first one is a button
//The second one is a picture
//The third one is a splashscreen
//The fourth one is a
{
    Q_OBJECT
public:
    my_widget(QWidget *parent=0,const char *name="my_widget");
private:
QPushButton *one;
QMainWindow *two;
};

#endif

运行时的出错信息为:
QObject::connection:No Such Slot my_widget::raiseWidget(id(two))
QObject::connection:(sender name: "one")
QObject::connection:(receiver name: "my_widget")

明明my_widget继承了QWidgetStack的slot,为什么说没有呢?
离线dbzhang800

只看该作者 1楼 发表于: 2009-07-29
你能不能说一下你用的Qt是那个版本。你看的那个版本的资料介绍的这个槽,二者的版本一样么?
离线shifan
只看该作者 2楼 发表于: 2009-07-29
都是系统自带的(REHL 5)QT 3 ,配套应该是不会错的。。。
离线shifan
只看该作者 3楼 发表于: 2009-07-30
还有就是经过高人指点,在my_widget的声明中我使用了句子class my_widget:public QWidgetStack,但是说实话我不知道为什么可以这样加public?这个public是什么意思?
而在实现构造函数的时候我没有这样使用,不知道这有没有影响?

如果在构造函数的第一行使用public编译是无法通过的。
离线shiroki

只看该作者 4楼 发表于: 2009-07-30
connect(one,SIGNAL(clicked()),this,SLOT(raiseWidget(id(two))));
这里要把括号里的two去掉
其他的问题去看C++的语法书就行了
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线wato
只看该作者 5楼 发表于: 2009-07-30
引用第3楼shifan于2009-07-30 10:26发表的  :
还有就是经过高人指点,在my_widget的声明中我使用了句子class my_widget:public QWidgetStack,但是说实话我不知道为什么可以这样加public?这个public是什么意思?


这个是C++里的继承的写法阿,public嘛就是继承的方式,在父类里成员是什么权限在子类里都不变
离线shifan
只看该作者 6楼 发表于: 2009-07-30
引用第4楼shiroki于2009-07-30 11:36发表的  :
connect(one,SIGNAL(clicked()),this,SLOT(raiseWidget(id(two))));
这里要把括号里的two去掉
其他的问题去看C++的语法书就行了

这个程序想实现按下按钮“one”,就变成显示第二个原件QMainWidget,也就是two,这里面如果把two去掉,如何知道QWidgetStack把哪一个原件显示呢?

我做个检讨,关于public的事情,不应该把语法问题拿出来问的,实在是不好意思...........
离线shifan
只看该作者 7楼 发表于: 2009-07-30
引用第4楼shiroki于2009-07-30 11:36发表的  :
connect(one,SIGNAL(clicked()),this,SLOT(raiseWidget(id(two))));
这里要把括号里的two去掉
其他的问题去看C++的语法书就行了

我把这句connect(one,SIGNAL(clicked()),this,SLOT(raiseWidget(id(two))));
改为
connect(one,SIGNAL(clicked()),this,SLOT(raiseWidget(int));
运行时的出错信息为:
QObject::connect: Incompatible sender/receiver arguments
    QPushButton::clicked() --> my_widget::raiseWidget(int)
这是否说明my_widget::raiseWidget()这个函数还是有的呢?
离线wato
只看该作者 8楼 发表于: 2009-07-30
signal slot 参数要一致  至少 slot的参数signal一定要有
离线shifan
只看该作者 9楼 发表于: 2009-07-30
十分感谢,我自己设定了一个slot,然后在里面调用raiseWidget,成功地运行了程序。感谢大家
快速回复
限100 字节
 
上一个 下一个