go to slot 是 Qt Creator 的功能,VS 打开的 Qt Designer 是没有的。
方法一 自定义Class的信号/槽
- 点击上方的“编辑信号/槽”
- 鼠标左键按住并拖动组件,拖到窗口的空白处,会出现类似地线的符号。注意:不要拖到其他组件上!
- 松开鼠标后会弹出“配置连接”的窗口,选择需要的信号,然后点击“编辑”。
-
在弹出的界面点击“加号”即可添加自定义的槽函数,添加完毕后点击“确定”,回到“配置连接”窗口选择我们自定义的函数即可。
-
来到 .h 和 .cpp 文件添加对应的代码。
// .h 文件
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication1.h"
class QtWidgetsApplication1 : public QMainWindow
{
Q_OBJECT
public:
QtWidgetsApplication1(QWidget *parent = nullptr);
~QtWidgetsApplication1();
// 添加 private slots:
// 添加刚才自定义的槽函数 slot1() 的声明
private slots:
void slot1();
private:
Ui::QtWidgetsApplication1Class ui;
};
此处为点击按钮B1后让单行文本框获取选择的文件路径
#include "QtWidgetsApplication1.h"
#include "QFileDialog"
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
setWindowTitle("窗口");
}
QtWidgetsApplication1::~QtWidgetsApplication1()
{}
// 添加 自定义槽函数 slot1() 的实现
void QtWidgetsApplication1::slot1()
{
QString fileName = QFileDialog::getOpenFileName(this, "选择文件", "", "文本文件 (*.txt);;所有文件 (*)");
if (!fileName.isEmpty()) {
ui.lineEdit->setText(fileName);
}
}
成功运行
方法二 按照命名规则命名槽函数
命名规则如下
void on_<object name>_<signal name>(<signal parameters>)
即
void on_组件名_信号(信号函数的参数)
注意:此方法无需在 Qt Designer 添加槽函数,仅通过代码就能实现。
继续上一个方法中的例子,我们让B2按钮实现和B1一样的功能。
.h 文件
private slots:
void slot1(); //B1
void on_B2_clicked(); //B2 按照命名规则命名槽函数
.cpp 文件
// B1
void QtWidgetsApplication1::slot1()
{
QString fileName = QFileDialog::getOpenFileName(this, "选择文件", "", "文本文件 (*.txt);;所有文件 (*)");
if (!fileName.isEmpty()) {
ui.lineEdit->setText(fileName);
}
}
// B2
void QtWidgetsApplication1::on_B2_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this, "选择文件", "", "文本文件 (*.txt);;所有文件 (*)");
if (!fileName.isEmpty()) {
ui.lineEdit->setText(fileName);
}
}