1,信号与槽要对应起来:
例:
QSpinBox *spinBox = new QSpinBox(&window);
QSlider *slider = new QSlider(Qt::Horizontal, &window);
以上以上的控件spinBox和slider的QSpinBox 就是只能输入数字的输入框,并且带有上下箭头的步进按钮。QSlider 则是带有滑块的滑竿。
QObject::connect(slider, &QSlider::valueChanged, spinBox, &QSpinBox::setValue);
void (QSpinBox:: *spinBoxSignal)(int) = &QSpinBox::valueChanged;
QObject::connect(spinBox, spinBoxSignal, slider, &QSlider::setValue);
我们要对其进行双向绑定。先用connect()函数,但是不能使用:
QObject::connect(spinBox, &QSpinBox::valueChanged, slider, &QSlider::setValue)
这样会报错,查看报错信息是说, QSpinBox::valueChanged 是一个 overloaded 的函数,查看qt文档发现QSpinBox有两个signal函数
- void valueChanged(int)
- void valueChanged(const QString &)
当我们使用 &QSpinBox::valueChanged 取函数指针时,编译器不知道应该取哪一个函数(记住前面我们介绍过的,经过 moc 预处理后,signal 也是一个普通的函数。)的地址,因此报错。
解决的方法很简单,编译器不是不能确定哪一个函数吗?那么我们就显式指定一个函数。方法就是,我们创建一个函数指针,这个函数指针参数指定为 int:
void (QSpinBox:: *spinBoxSignal)(int) = &QSpinBox::valueChanged;
然后我们将这个函数指针作为 signal,与 QSlider 的函数连接:
QObject::connect(spinBox, spinBoxSignal, slider, &QSlider::setValue);
-----------------------------------------------------------------------------------------------------------
2.
setShortcuts()函数是添加快捷键 setStatusTip()函数是在状态栏添加提示语
例:
openAction->setShortcuts(QKeySequence::Open);
openAction->setStatusTip(tr("Open an existing file"));