Qt自定义QPushButton点击信号
Qt custom QPushButton clicked signal
我想将字符串和fret这两个整数发送到一个SLOT,该SLOT将处理按下按钮的位置。SIGNAL和SLOT参数必须匹配,所以我认为我需要重新实现QPushButton::clicked事件方法。问题是我是Qt的新手,可能需要一些指导。
connect(&fretBoardButton[string][fret], SIGNAL(clicked()), this, SLOT (testSlot()));
如果使用C++11连接语法,则可以使用lambda来调用带有string
和fret
参数的testSlot
:
connect(&fretBoard[string][fret], &QPushButton::clicked, [this, string, fret]() {
testSlot(string, fret);
});
此代码使用[captures, ...](arguments, ...) { code }
语法创建lambda。当您建立连接时,它会捕获string
和fret
变量值,然后在单击按钮时将它们传递给testSlot
。
有两种方法可以用来添加字符串和fret信息。一种是使用sender()函数来获取发出信号的按钮。如果他们是你的按钮类的成员,你可以访问fret和string,所以在SLOT中你会有。
MyPushButton *button = (MyPushButton *)sender();
button.getFret();
button.getString();
但是,由于您已经对QPushButton进行了子分类,因此可以使用专用SLOT来捕获buttonClicked信号,并重新发出具有正确值的信号。
在构造函数中
connect(this, SIGNAL(clicked()), this, SLOT(reemitClicked()));
然后再发射时隙
void MyPushButton::reemitClicked()
{
emit clicked(m_fret, m_string);
}
请确保为您的类添加适当的专用插槽和公共信号https://doc.qt.io/archives/qq/qq10-signalmapper.html关于在信号中添加自变量的各种方法,请参阅本文。
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 在条件变量中触发错误信号的频率是多少
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 调试和自由执行中的信号处理
- 来自QPushButton的信号QGraphicsViewPaintEvent
- 通过 QPushButton 信号更改 QLabel setPixmap()
- c++QPushButton信号和插槽
- Qt自定义QPushButton点击信号
- 如何防止QPushButton调用信号两次
- QPushButton:如何知道"released"信号后面是否会跟"clicked"信号?
- Qt C++ : 使用信号/插槽链接QPushButton子类的多个实例
- Qt槽和信号:输入QPushButton作为参数