• 13126阅读
  • 19回复

如何实现在一个二维QPushButton中一个button得到clicked时 [复制链接]

上一主题 下一主题
 
只看楼主 正序阅读 楼主  发表于: 2011-03-12
如何实现在一个二维QPushButton中一个button得到clicked时,能把他的i,j参数传到slots里?


i,j是必须用的~。


[pre] connect(digitalbutton[0][j],SIGNAL(clicked()),this,SLOT(getmove(i,j)));[/pre][pre]这行会导致re。[/pre]
离线hgl2073
只看该作者 19楼 发表于: 2011-03-16
回 楼主(做个小计划) 的帖子
另外,针对你的问题,给个建议思路:
1、建立起你的QPushButton与i,j的关系,不管什么方法,比如二维数组,Map容器,甚至利用QTableWidget(QPushButton作为QTableWidgetItem放入对应表格)。不过本人建议Map容器,效率会高点,且不会引入表格控件(你未必喜欢那种视觉效果)。

2、对于每个QPushButton对象,
connect(digitalbutton,SIGNAL(clicked()),this,SLOT(getmove()));   //digitalbutton对QPushButton进行遍历。

3、getmove()的实现:

void getmove() {
        QPushButton * digitalbutton = (QPushButton *) sender();
        //上文sender()函数参见:http://doc.qt.nokia.com/4.7-snapshot/qobject.html#sender
      
       //然后根据digitalbutton ,获取对应i,j值,当然i,j要作为成员变量
       ...  
}
离线hgl2073
只看该作者 18楼 发表于: 2011-03-16
回 7楼(做个小计划) 的帖子
connect不是这么用的。
先看看《C++ GUI Programming with Qt4》,Part I: Basic Qt,2. Creating Dialogs,Signals and Slots in Depth。


只看该作者 17楼 发表于: 2011-03-12
回 13楼(coblan) 的帖子
前面那个signal,slot的问题, 我没注意,下午看了看书才知道了。等我做完这个蛋疼的八数码再仔细看你提供的指针方法~  多谢~
只看该作者 16楼 发表于: 2011-03-12
这样就可以找到当前的被pressed的按钮了。 不过有点暴力哈,但是3*3来说其实也就是O(1)操作。

希望能有更好的方法出现。
只看该作者 15楼 发表于: 2011-03-12
分享一下方法:

connect(digitalbutton[0][j],SIGNAL(pressed()),this,SLOT(getmove()));

这个还是不变,主要是发现了一个函数bool isDown()

只看该作者 14楼 发表于: 2011-03-12
好使了oy 多谢大家~~
离线coblan

只看该作者 13楼 发表于: 2011-03-12
Re:获取QT窗口句柄
楼主的意思是想通过 singal slot 机制传递的信息,包括 button的ID号吗????这样可以知道是哪个button被点击了,是这样吗?
3楼版主的方法应该是最好的。。
你的:connect(digitalbutton[0][j],SIGNAL(clicked()),this,SLOT(getmove(i,j)));
显然是不行的,SINGAL 和SLOT 后面都不能带形参,而且SLOT的参数不能比SINGAL多,要不多的参数得不到值。
此外你还可以通过很简单的方法知道是谁发送的SIGNAL:
在 slot函数中,调用:sender()就可以知道是谁发送的SIGNAL ;然后你把他
Qpushbutton* push=dynmic_case<Qpushbutton*>(sender);
这样push指针就可以用了。
只看该作者 12楼 发表于: 2011-03-12
就是想实现空框的移动,蛋疼了。。。
只看该作者 11楼 发表于: 2011-03-12
其实我正在看。。。 手头有本QT4 2nd。。。。  其实我纯粹不是用它来搞开发的。。 就是拿他写东西玩。。。
想写个八数码,但是操作这一步蛋疼了。。




只看该作者 10楼 发表于: 2011-03-12
我看错了你那句话了。。。 我没有自定义信号。。。没有。。。。 压根不知道这回事。。。。
离线dbzhang800

只看该作者 9楼 发表于: 2011-03-12
引用第7楼做个小计划于2011-03-12 17:34发表的  :
那我定义了
private slots:
void getmove( int ,int);

.......

呵呵,先找本书看看吧,如果你暂时不想看Qt自带的Manual和例子的话
只看该作者 8楼 发表于: 2011-03-12
也按照网上说的重新qmake了一次,还是有问题。。。
只看该作者 7楼 发表于: 2011-03-12
那我定义了
private slots:
void getmove( int ,int);



并这么调用:


  connect(digitalbutton[0][i][j],SIGNAL(clicked()),this,SLOT(getmove(i,j)));


却得不到响应,编译还有这样的提示:


No such slot MyMainWindow::getmove() in ..\Eight\mainwindow.cpp:66


初学。。。 蛋疼地表示很无可奈何。。。


请帮忙指出可能哪里出错了?
离线dbzhang800

只看该作者 6楼 发表于: 2011-03-12
Re:回 3楼(XChinux) 的帖子
引用第5楼做个小计划于2011-03-12 17:06发表的 回 3楼(XChinux) 的帖子 :
那自定义slot可不可以是有参数的?


当然可以,只要你自定义信号的参数和它对应即可
只看该作者 5楼 发表于: 2011-03-12
回 3楼(XChinux) 的帖子
那自定义slot可不可以是有参数的?
只看该作者 4楼 发表于: 2011-03-12
多谢~
离线XChinux

只看该作者 3楼 发表于: 2011-03-12
using QButtonGroup
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
只看该作者 2楼 发表于: 2011-03-12
坐等回复~~
只看该作者 1楼 发表于: 2011-03-12
自己顶一个
快速回复
限100 字节
 
上一个 下一个