如何实现在一个二维QPushButton中一个button得到clicked时

 我来答
匿名用户
2016-05-23
展开全部
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要作为成员变量
...
}
匿名用户
2016-05-23
展开全部
QToolBox,QTabWidget,QTabBar是通过currentChanged(int)这个signal来得到当前的currentIndex改变的。
Suppose在QToolBox上有3个QToolBoxButton, 每个QToolBoxButton下又有2个item,当我选中第二个QToolBoxButton下的任意一个item的时候,这时候QToolBox的currentIndex是1. 这时候再去点击current QToolBoxButton的时候,是没有currentChanged(int) signal发出的。如果我就是想处理点击同一个QToolBoxButton的情况呢?

可能你也想到了,得到QToolBoxButton的指针不就ok了吗?Unfortunately,类似于QTabBar上的Tab这个structure,QToolBox里的QToolBoxButton也是private,我们无法通过“正常途径"得到。

既然此路不通,就另辟蹊径,QObject的函数findChildren()可以出场了。。。

QList<T> QObject::findChildren ( const QString & name = QString() ) const

Returns all children of this object with the given name that can be cast to type T, or an empty list if there are no such objects. Omitting the name argument causes all object names to be matched. The search is performed recursively.

The following example shows how to find a list of child QWidgets of the specified parentWidget named widgetname:
QList<QWidget *> widgets = parentWidget.findChildren<QWidget *>("widgetname");
This example returns all QPushButtons that are children of parentWidget:
QList<QPushButton *> allPButtons = parentWidget.findChildren<QPushButton *>();

QToolBoxButton的base class是QTbstractButton,这些QToolBoxButton的objectName都是”qt_toolbox_QToolBoxButton“,因此,我们的代码可以这样写:
QList<QAbstractButton *> btnlist = findChildren<QAbstractButton*>(tr("qt_toolbox_QToolBoxButton"));

接下来的处理方式就有很多了,installEventFilter或者直接connect clicked() signal。。。
QAbstractButton* btn = NULL;
qint32 counter = btnlist.count();
for (qint32 i = 0; i < counter; i++)
{
btn = btnlist.at(i);
btn->installEventFilter(this); // method 1.
// connect(btn, SIGNAL(clicked()), this, SLOT(toolboxbtnClicked())); // method 2.
}
举一反三,QT其他的很多widget的私有widget也可以通过这种方式获得。This is tricky. Yet, QT supplies us one method at least.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式