QT中,点击树结构中某一行的弹簧按钮结构,如何将其对应行的信息保存并传值给另一个函数

例如我有一个button,我想点击它之后把两个参数传到我写的槽函数里去,参数该怎么传,我是这样写的
connect(button,
SIGNAL(clicked()),
SLOT(myslot(int i, int j)))
i和j是前面给了值的,但是我写的这个传不进去,求大神告知如何传
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:6807次
排名:千里之外
(1)(1)(2)(4)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'22593人阅读
Qt中的信号-槽机制大大降低了编程的耦合度;
QPushButton是按钮中最常用的一个组件;
但是QPushButton的几个信号中除了缺省参之外都没有带参:
Q_SIGNALS:
void pressed();
void released();
void clicked(bool checked = false);也就是说,若你的槽函数与多个QPushButton的clicked()信号相连,则你的槽函数根本无法区分是哪个QPushButton发出的信号;
这在很多时候用起来也是很不方便;
“软件开发中遇到的所有问题,都可以通过增加一层抽象而得以解决”
同样的,这个问题我们可以通过子类化来解决:
class KeyButton : public QPushButton
explicit KeyButton(QWidget *parent = 0) : QPushButton(parent),
pauseMsecs(400), intervalMsecs(30)
tm = new QTimer(this);
connect(tm, SIGNAL(timeout()), this, SLOT(on_pressed_last()));
connect(this, SIGNAL(pressed()), this, SLOT(on_pressed()));
connect(this, SIGNAL(released()), this, SLOT(on_released()));
connect(this, SIGNAL(clicked()), this, SLOT(on_clicked()));
long pauseM
long intervalM
void keyPressed(const QString &msg);
void keyReleased(const QString &msg);
void keyClicked(const QString &msg);
public slots:
void on_pressed() { emit this-&keyPressed(this-&text());
tm-&start(pauseMsecs); }
void on_pressed_last() { emit this-&keyPressed(this-&text());
tm-&setInterval(intervalMsecs); }
void on_released() { tm-&stop(); emit this-&keyReleased(this-&text()); }
void on_clicked() { emit this-&keyClicked(this-&text()); }
这其中的定时器,是为了实现类似长按则连续输入的按键效果;
这样的按钮类就可以在自己的信号Clickied()、Pressed()或Released()中夹带各种信息,使得槽函数能根据信息不同进行不同处理,这里夹带的是按钮上的文本,你也可以根据需求随意修改,夹带各种你想传递的信息。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:313686次
积分:1379
积分:1379
排名:千里之外
原创:12篇
评论:30条
(1)(1)(1)(5)(2)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'本文转自&http://blog.csdn.net/hanxing0/article/details/9087237,感谢这位博主的原创文章。
在写程序时,难免会碰到多窗体之间进行传值的问题。依照自己的理解,我把多窗体传值的可以使用的方法归纳如下:
& & & 1.使用QT中的Signal&Slot机制进行传值;
& & & 2.使用全局变量;
& & & 3.使用public形式的函数接口;
& & & 4.使用QT中的Event机制(这种没有把握,但是感觉应该是可以的),但是实现起来应该比前几种复杂,这里不做讨论。
& & & &下面分别进行讨论:
1.使用QT中的Signal&Slot机制进行传值:
& & & QT中的Signal&Slot机制相比于MFC中的消息机制简单了许多,它保证了任何对象之间均可以通过这种方式进行通信,甚至可以得到消息的sender。这里就拿一个简单的窗体间传值作为例子。
& & & 首先看一下主窗体MainWindow:
& & & 在设计器中拖拽一个Label和一个TextEdit控件到界面上,TextEdit用于显示传递过来的数据。
& & 创建一个右下有两个按键的对话框,放置一个Label和一个LineEdit。
& & &下面就是编码的操作了,我们需要在Dialog中声明一个信号,当用户点击OK时传递LineEdit中的内容到mainWindow中,具体的dialog.h代码为:
& & & 其中的signals:void sendData(QString)便是我们需要的信号函数,同时声明了一个槽函数
& & & &void on_buttonBox_accepted();用于相应确定按钮的click事件。下面就是需要在该函数中产生一个信号。代码如下:
& & & 代码异乎寻常的简单,只需要用emit的方式调用sendData函数,将需要的参数传递进去即可。而MainWindow中则需要声明接收的槽函数,注意槽函数参数只能与信号函数少或相等,而不能多于信号函数参数个数。在MainWindow的头文件中声明槽函数:
& & 为了便于测试,我只在MainWindow的构造函数中创建了一个Dialog对象,并连接了信号和槽,具体为:
& & & 这里,我没有将父窗口的指针传递到Dialog中,如new Dialog(this),这种方式下,实际上可以归结到第三类传值方式中去。因为此时,可以使用MainWindow中的父窗口的函数进行数据的赋值和操作。
& & & 这里,可能还有一个问题就是,父窗口如何给子窗口传值,一方面,仍然可以使用信号和槽的方式进行,但是,我感觉更便利的方式倒是使用这种public接口的方式进行传值。这种来的更直接和明显。当然,可以看出Signal&Signal方式进行此类的处理会更有通用性。
& & 在receiveData(QString)的槽函数中进行接收到数据的处理,这里仅仅进行了简单的显示:
& & 最后看下结果:
& & & &最终的结果,因为信号和槽可以是多对多的,所以,在类似多个窗体广播信息时,这种方式就很有用,当然也可以使用全局变量的形式。
本文已收录于以下专栏:
相关文章推荐
1.使用QT中的Signal&Slot机制进行传值
   我在mainwindow里面添加了一个textedit用来接收传递过来的值,dialog里面添加了一个ok按钮和一个lineedit,可以在l...
网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。
网上说了很多种传值的方式,在此主要有3种:
1.使用QT中的Signal&Slot机制进行传值;
2.使用全局变量;
3.使用public形式的函数接口;
此处试验了用Signal和Slot的方式来传...
part 3 窗口之间传值
一、信号与槽机制传值
1、主窗口与子窗口之间传值:
主窗口为ParentChild,继承MainWindow类
子窗口为TestDialog,继承QDialog类
要实现的功能:
主窗口MainWindow中打开子窗口UdpChannel后,子窗口发送一个信号,传递一个QString,要求在主窗口的QTextBrowser中打印出来!(比如操作的日志信息...
QT中使用信号与槽机制来传递信号,实现按钮响应,菜单栏响应等操作。与先实例化类的对象,再调用类的成员函数,实现了类似的功能。本文讨论QT中使用信号与槽机制来传递信号的2中情况。
信号和槽用于对象间的通讯。信号/槽机制是Qt的一个中心特征并且也许是Qt与 其它工具包的最不相同的部分。
在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个 窗口部件...
Qt是通过信号和槽的机制进行事件传递的,当有多个不同类型、或相同类型的物件的发送信号都通过一个槽来处理的时候,需要在槽中识别出这些信号然后做相应的处理。
在一个界面中有16个按钮(...
今天在 tablewidget中写了个委托。
想实现 点击委托中的editor(一个button),在主窗口能够显示菜单。 一开始就想到了信号槽机制,但是问题在于 button 是 委托中的,没法直...
Qt教程] Qt学习之路第14篇
对话框数据传递
 发表于
11:51:05 | 查看:
180| 回复: 0
他的最新文章
讲师:董西成
讲师:唐宇迪
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)17923人阅读
& & & & &&在写程序时,难免会碰到多窗体之间进行传值的问题。依照自己的理解,我把多窗体传值的可以使用的方法归纳如下:
& & & 1.使用QT中的Signal&Slot机制进行传值;
& & & 2.使用全局变量;
& & & 3.使用public形式的函数接口;
& & & 4.使用QT中的Event机制(这种没有把握,但是感觉应该是可以的),但是实现起来应该比前几种复杂,这里不做讨论。
& & & &下面分别进行讨论:
1.使用QT中的Signal&Slot机制进行传值:
& & & QT中的Signal&Slot机制相比于MFC中的消息机制简单了许多,它保证了任何对象之间均可以通过这种方式进行通信,甚至可以得到消息的sender。这里就拿一个简单的窗体间传值作为例子。
& & & 首先看一下主窗体MainWindow:
& & & 在设计器中拖拽一个Label和一个TextEdit控件到界面上,TextEdit用于显示传递过来的数据。
& & 创建一个右下有两个按键的对话框,放置一个Label和一个LineEdit。
& & &下面就是编码的操作了,我们需要在Dialog中声明一个信号,当用户点击OK时传递LineEdit中的内容到mainWindow中,具体的dialog.h代码为:
#ifndef DIALOG_H
#define DIALOG_H
#include &QDialog&
namespace Ui {
class Dialog : public QDialog
explicit Dialog(QWidget *parent = 0);
~Dialog();
Ui::Dialog *
sendData(QString);
private slots:
void on_buttonBox_accepted();
#endif // DIALOG_H
& & & 其中的signals:void sendData(QString)便是我们需要的信号函数,同时声明了一个槽函数
& & & &void on_buttonBox_accepted();用于相应确定按钮的click事件。下面就是需要在该函数中产生一个信号。代码如下:
void Dialog::on_buttonBox_accepted()
emit sendData(ui-&lineEdit-&text());
& & & 代码异乎寻常的简单,只需要用emit的方式调用sendData函数,将需要的参数传递进去即可。而MainWindow中则需要声明接收的槽函数,注意槽函数参数只能与信号函数少或相等,而不能多于信号函数参数个数。在MainWindow的头文件中声明槽函数:
private slots:
void receiveData(QString data);
& & 为了便于测试,我只在MainWindow的构造函数中创建了一个Dialog对象,并连接了信号和槽,具体为:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui-&setupUi(this);
//信号槽方式下父子窗体传值的测试
Dialog *dlg = new D
//关联信号和槽函数
connect(dlg,SIGNAL(sendData(QString)),this,SLOT(receiveData(QString)));
// dlg-&setModal(true); 不论是模态或者非模态都可以正常传值
dlg-&show();
}& & & 这里,我没有将父窗口的指针传递到Dialog中,如new Dialog(this),这种方式下,实际上可以归结到第三类传值方式中去。因为此时,可以使用MainWindow中的父窗口的函数进行数据的赋值和操作。
& & & 这里,可能还有一个问题就是,父窗口如何给子窗口传值,一方面,仍然可以使用信号和槽的方式进行,但是,我感觉更便利的方式倒是使用这种public接口的方式进行传值。这种来的更直接和明显。当然,可以看出Signal&Signal方式进行此类的处理会更有通用性。
& & 在receiveData(QString)的槽函数中进行接收到数据的处理,这里仅仅进行了简单的显示:
void MainWindow::receiveData(QString data)
ui-&textEdit-&setText(data);
& & 最后看下结果:
& & & &最终的结果,因为信号和槽可以是多对多的,所以,在类似多个窗体广播信息时,这种方式就很有用,当然也可以使用全局变量的形式。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:146031次
积分:1846
积分:1846
排名:千里之外
原创:45篇
转载:11篇
评论:48条
(2)(1)(2)(7)(9)(4)(1)(6)(12)(2)(1)(2)(1)(2)(1)(4)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 ext 点击按钮生成行列 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信