初学qt问个问题。有关qt的信号机制

w-bobo 2014-03-10 05:28:00
一个简单的例子。通过qt的设计器 里面有 1个edit 2个button 一个okbutton 一个cancelbutton
有3个dlg。h和dlg。cpp main。cpp
dlg。h文件如下

class dlg: pulic QDialog ,pulic Ui::togoDialog//togoDialog是设计器的ui**.h类

{
Q_OJBECT
public:
dlg(QWidget *parent=0);
private slots:
void on_lineEdit_changed();

};

dlg.cpp 文件如下

dlg:dlg(QWidget *parent) :QDialgo(parent)
{
setupUi(this);
connect (okbutton,SIGNAL(clicked()),this,SLOT(accept()));
connect (cannelbutton,SIGNAL(clicked()),this,SLOT(reject()));

//信号槽关联。

}


void dlg::on_lineEdit_textchanged()
{
okbutton->setEnabled(Edit->hasAcceptableInput());
}

默认okbutton是false
这个程序。如果在edit中输入okbutton变成可用

问题是:okbutton 自己产生信号。自己接受。这个edit是如何和okbutton关联的呢。
如果是这个clicked是edit产生的。和okbutton 关联。那么这个on_linedit_textchanged()函数谁什么时候调用的。

就像mfc中的事件相应。我单击edit会有个消息相应。进入到消息相应的函数中。进行处理。这里面的edit控件的消息相应函数在那呢?

同样:我在cpp文件中加入另一个函数。同样也是在privaet slot中声明的为什么,当edit有输入的时候。没有message弹出呢?
void dlg::mesg()
{
if(edit->hasAcceptableInput())
{
QMessage:....
}
}

谢谢了!!!
...全文
249 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
w-bobo 2014-03-11
  • 打赏
  • 举报
回复
这回明白了。这edit的关联是QMetaObject::connectSlotsByName(MyDialog); 这里面产生的关联。并且connectSlotsByName 很特殊。如果把on_lineEdit_textchanged() 改成lineEdit_textchanged() 都不会相应这个消息。参考http://www.cnblogs.com/ttylikl/archive/2009/07/13/1522770.html 和上面的信号和槽一点关系没有。结贴。谢谢6楼!
nlstone 2014-03-10
  • 打赏
  • 举报
回复
你是不是不知道这个槽函数:on_lineEdit_textchanged()是在什么时候被连接上的? 这个是Qt特有的一个根据名字进行缺省连接信号和槽的机制实现的。 你在你的ui文件生成的头文件里可以找到类似于下面的语句: QMetaObject::connectSlotsByName(MyDialog); 这个函数调用会按照一定的命名规则来把控件的信号和槽函数连接起来。 如果你在Qt Designer里面右键点击控件,然后选择go to slot...,通过这种方式也可以创建同样的缺省信号槽的处理函数。 亦可参见: http://www.cnblogs.com/ttylikl/archive/2009/07/13/1522770.html
菜园小火车 2014-03-10
  • 打赏
  • 举报
回复
你不是代码没贴完。应该是Edit输入的时候发出了自己的信号textchanged。然后调用了on_lineEdit_textchanged()在里面通过 okbutton->setEnabled(Edit->hasAcceptableInput()) okbutton改成了可以按下去的。然后connect (okbutton,SIGNAL(clicked()),this,SLOT(accept()));关联了 okbutton和界面。accept()是界面的槽。
w-bobo 2014-03-10
  • 打赏
  • 举报
回复
代码是我是按照书上写的。程序也实现的。我也没看明白这edit和这个button的关联代码在那? 这个edit的相应函数在那?我想问的也是这个问题。
  • 打赏
  • 举报
回复
从你贴的代码没看出你要问的问题
w-bobo 2014-03-10
  • 打赏
  • 举报
回复
楼上这么做我可以理解的。我想问的是。同样的程序这个:on_lineEdit_textchanged函数是在那调用的。如果是connect 写成connect (lineEdit,SIGNAL(textchanged()),this,SLOT(on_lineEdit_textchanged)); 这样我明白。就是当edit有变化的时候。调用on_lineEdit_textchanged。这和mfc的消息相应。差不多。类似一个message map的作用。 而这是一个okbutton的消息映射或者叫做槽。和edit有什么关系呢?
zyq5945 2014-03-10
  • 打赏
  • 举报
回复
Qt源码分析之信号和槽机制 - hicjiajia - 博客园 Qt也是事件循环机制。 光有槽是不行的,需要把相应的信号连接到槽上才能起作用。 connect (lineEdit,SIGNAL(textchanged()),this,SLOT(mesg()));

16,810

社区成员

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

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