不能使用父类的信号?

neicole 2012-03-02 11:10:21
others:
话说,后来,在群上稍问了一下: 不能使用父类的信号作为发射源????得到的答案是,能用~在Q tCore很多的继承类的都用到了,群上的同志们是这样说的,然后,开始怀疑是不是自己写的代码有问题,将自己的详细过程写出:

自己定义了这么几个类:
// first.
class mainWindow : public QMainWindow
{
Q_OBJECT
public:
mdiWindow * mdi;
...
};
// second
class mdiWindow: public QMdiArea
{
Q_OBJECT
public:
fileNew(); // 在fileNew()中有创建singleText的对象,放在内存的堆中。
...
};
// third
class singleText: public QTextEdit
{
Q_OBJECT
public slot:
test(); // 弹出一个QMessageBox的对话框,用于测试函数。
...

};

因为在QTextEdit中有信号 void QMdiArea::subWindowActivated ( QMdiSubWindow * window ) [signal]
由于功能需要,想在mainWindow中使用到这个函数,于是就尝试connect这个信号,但了,为了排除其它因素的影响,就直接在第三个类中做测试了。

在第三个类的构造函数中添加下面的语句:
connect(this, SIGNAL(subWindowActiveated(QMdiSubWindow * window)), this, SLOT(book()));
结果,在进行窗口切换时,这个slot并没有响应,不知道是不是自己的connect方法出错,在这里请教大家如何能在子类中使用父类的信号?能这样使用的吗?

...全文
239 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
neicole 2012-03-03
  • 打赏
  • 举报
回复
在第二个类中再定义一个book的slot
然后,
connect(this, SIGNAL(subWindowActivated(QMdSubWindow *)), this, SLOT(book(QMdSubWindow *)));
还是不行。
neicole 2012-03-03
  • 打赏
  • 举报
回复
晕啊~这样才是。。。这次没打错了~

connect(mdi, SIGNAL(subWindowActivated(QMdSubWindow * window)), qobject_cast<singleText *>(mdi -> QMdiArea::activeSubWindow () -> QMdiSubWindow::widget()) , SLOT( singleText::fileSaveSingle()));

这样算不算已经实例化了呢?意思是要在内存栈中定义了才算?所以这样就不行了?
neicole 2012-03-03
  • 打赏
  • 举报
回复
忽然发觉,打错了,是在第一个类才是测试的语句:
connect(mdi, SIGNAL(subWindowActivated(QMdSubWindow * window)), qobject_cast<singleText *>(this -> QMdiArea::activeSubWindow () -> QMdiSubWindow::widget()) , SLOT( singleText::fileSaveSingle()));
neicole 2012-03-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jdwx1 的回复:]

你的代码肯定有问题,看看这个例子:
http://doc.qt.nokia.com/4.7-snapshot/widgets-codeeditor.html
其中的一段代码:
CodeEditor::CodeEditor(QWidget *parent) : QPlainTextEdit(parent)
{
lineNumberArea = new LineNumberAr……
[/Quote]

谢啦,问题解决了~

connect(this, SIGNAL(subWindowActivated(QMdiSubWindow *)), this, SLOT(book(QMdiSubWindow *)));
在这个交流调试的过程,同时也知道了,原来:
SIGNAL不可带形参,子类可以使用父类的SIGNAL。
用bool = connect(...)可以检测connect的状态。
另外,也实现了这个connect后才知道,原来subWindowActivated的功能并不如想像中那么符合自己的功能要求,这个subWindowActived当有激活窗口的时候就会不断执行,也就是说,它会陷入一个死循环。
jdwx 2012-03-03
  • 打赏
  • 举报
回复
你的代码肯定有问题,看看这个例子:
http://doc.qt.nokia.com/4.7-snapshot/widgets-codeeditor.html
其中的一段代码:
CodeEditor::CodeEditor(QWidget *parent) : QPlainTextEdit(parent)
{
lineNumberArea = new LineNumberArea(this);

connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateLineNumberAreaWidth(int)));
connect(this, SIGNAL(updateRequest(QRect,int)), this, SLOT(updateLineNumberArea(QRect,int)));
connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(highlightCurrentLine()));

updateLineNumberAreaWidth(0);
highlightCurrentLine();
}
Suese 2012-03-02
  • 打赏
  • 举报
回复
父类的信号肯定可以发射的

connect(this, SIGNAL(subWindowActiveated(QMdiSubWindow * window)), this, SLOT(book()));

应该在类实例化之后connect

在类里面不知道会不会有问题,上次看了篇不太清楚,你试试

16,818

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧