• 6920阅读
  • 6回复

我编写的slot无法运行 [复制链接]

上一主题 下一主题
离线polarity
 
只看楼主 倒序阅读 楼主  发表于: 2006-09-16
我编写了一段代码,主要是想实现点击按钮后消隐第一个窗口显示第二个窗口的功能,编译也能通过,但是运行后点击按钮没有反应,提示错误为
QObject::connect: No such slot QDialog::ss()
QObject::connect: (sender name: 'unnamed')
QObject::connect: (receiver name: 'page')

源代码如下:
/* project.h */
#include<qwidget.h>
#include<qdialog.h>
#include<qpushbutton.h>

class MyMainWindow: public QWidget
{
Q_OBJECT
public:
    MyMainWindow();
    QDialog *dialog;
    QDialog *dialog1;
    QPushButton *button;
    QPushButton *button1;
public slots:
  void ss();
 
};
/* main.cpp */

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

void MyMainWindow::ss()
{
dialog->hide();
dialog1->show();
}

MyMainWindow::MyMainWindow()
{
setGeometry(0,0,800,600);
QDialog *dialog = new QDialog(0,"page",FALSE);
dialog->setCaption("dialog");
dialog->setGeometry(0,0,800,600);

QPushButton *button = new QPushButton("huan ying",dialog);
button->setGeometry(50,20,200,80);

QDialog *dialog1 = new QDialog(0,"page1",FALSE);
dialog1->setCaption("dialog1");
dialog1->setGeometry(0,0,800,600);

QPushButton *button1 = new QPushButton("huan ying1",dialog1);
button1->setGeometry(50,20,200,80);

dialog1->show();
connect(button,SIGNAL(clicked()),dialog,SLOT(ss()));
}


int main(int argc,char **argv)
{
QApplication a(argc,argv);
MyMainWindow w;
a.setMainWidget(&w);
//w.show();
return (a.exec());
}

我是qt初学者,仿照kde 2/qt 4.1编写的程序,麻烦各位大侠予以指点
离线ediwon
只看该作者 1楼 发表于: 2006-09-17
connect(button,SIGNAL(clicked()),this,SLOT(ss()));
BLOG:
http://www.ediwon.com
-------------------------------
离线polarity
只看该作者 2楼 发表于: 2006-09-17
改成this后还是不行,编译能通过,但是点击按钮时提示 段错误,运行界面直接退出,请问这是怎么回事啊?
离线style
只看该作者 3楼 发表于: 2006-09-17
仔细帮你看看.
你的思路不对...而程序语法没有问题

dialog dialog1 button button1把你搞昏头了...
最简单明显的问题
构造函数中有
dialog1->show()
而你在ss() [slot]中又调用dialog1->show()

还有.
//connect(button,SIGNAL(clicked()),this,SLOT(ss()));
你这个signal是指定button的
而button在dialog上,构造函数中只显示了dialog1,而没显示dialog,所以永远就得不到这个按钮...
离线polarity
只看该作者 4楼 发表于: 2006-09-17
感谢style的回答, 实在不好意思这是我粘贴时候不小心弄错的,源程序写的是dialog->show()。我是想实现循环调用两个dialog的功能,即每个按钮可以消隐自己的对话框显示另一个。但是slot我不知道在哪里定义,如果定义在上面的mymainwindow里,即connect里第三个参数为this,那么系统提示“段错误”,如果第三个参数为dialog,那么就出现最上面的错误提示。我现在实在想不出办法了,麻烦谁能给我点提示,谢谢大家!
离线style
只看该作者 5楼 发表于: 2006-09-17
段错误很正常.是因为没分配内存空间
..因为你在

void MyMainWindow::ss()
{
dialog->hide();
dialog1->show();
}

调用了dialog与dialog1
而这两个对像是类数据成员.
而你在构造函数中new内存时并不是给类数据员数分配,而是给你另外又建的两个dialog分配.

解决办法:
把构造函数中的

QDialog *dialog = new QDialog(0,"page",FALSE);
QDialog *dialog1 = new QDialog(0,"page1",FALSE);

改成

dialog = new QDialog(0,"page",FALSE);
dialog1 = new QDialog(0,"page1",FALSE);
[ 此贴被style在2006-09-17 23:34重新编辑 ]
离线polarity
只看该作者 6楼 发表于: 2006-09-18
感谢style!问题解决了
快速回复
限100 字节
 
上一个 下一个