首页| 论坛| 消息

标题:我编写的slot无法运行
作者:polarity
日期:2006-09-16 20:58
内容:

我编写了一段代码,主要是想实现点击按钮后消隐第一个窗口显示第二个窗口的功能,编译也能通过,但是运行后点击按钮没有反应,提示错误为
QObject::connect: No such slot QDialog::ss()
QObject::connect: (sender name: 'unnamed')
QObject::connect: (receiver name: 'page')
源代码如下:
/* project.h */
#include
#include
#include
class MyMainWindow: public QWidget
{
Q_OBJECT
public:
MyMainWindow();
QDialog *dialog;
QDialog *dialog1;
QPushButton *button;
QPushButton *button1;
public slots:
void ss();

};
/* main.cpp */
#include
#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编写的程序,麻烦各位大侠予以指点


#1 [ediwon 09-17 00:12]
connect(button,SIGNAL(clicked()),this,SLOT(ss()));
#2 [polarity 09-17 11:29]
改成this后还是不行,编译能通过,但是点击按钮时提示 段错误,运行界面直接退出,请问这是怎么回事啊?
#3 [style 09-17 17:07]
仔细帮你看看.
你的思路不对...而程序语法没有问题
dialog dialog1 button button1把你搞昏头了...
最简单明显的问题
构造函数中有
dialog1->show()
而你在ss() 中又调用dialog1->show()
还有.
//connect(button,SIGNAL(clicked()),this,SLOT(ss()));
你这个signal是指定button的
而button在dialog上,构造函数中只显示了dialog1,而没显示dialog,所以永远就得不到这个按钮...
#4 [polarity 09-17 19:59]
感谢style的回答, 实在不好意思这是我粘贴时候不小心弄错的,源程序写的是dialog->show()。我是想实现循环调用两个dialog的功能,即每个按钮可以消隐自己的对话框显示另一个。但是slot我不知道在哪里定义,如果定义在上面的mymainwindow里,即connect里第三个参数为this,那么系统提示“段错误”,如果第三个参数为dialog,那么就出现最上面的错误提示。我现在实在想不出办法了,麻烦谁能给我点提示,谢谢大家!
#5 [style 09-17 23:20]
段错误很正常.是因为没分配内存空间
..因为你在
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);

<< 1 2 >> (1/2)

回复 发表
主题 版块