我正在使用 Qt Creator 制作一个简单的 GUI。
我正在尝试在 mainwindow.cpp 文件中创建一个“openFile”函数,但我不知道是让这个函数成为主窗口本身的成员、单独的静态函数还是小部件的成员。
这个函数真的很简单,它只是调用一个QFileDialog,获取一个文件的路径,然后打开它,就像你见过的菜单栏上的每个打开文件命令一样。
现在这是我遇到的主要问题。我尝试让这个函数成为 mainwindow 的成员,以便我可以从函数中访问 ui 元素,ui->QTableWidget
例如,但如果我这样做,我无法将信号正确连接到插槽。我得到了一大堆错误,因为为了做到这一点,我需要参考主窗口,因为 connect 有语法connect(sender, signal, receiver, slot)
然后我求助于使该功能独立,但它无法访问任何 ui 元素。
我应该如何解决这个问题?
编辑 这是我在构造函数中所做的。
//Constructor
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QObject::connect(ui->actionOpen, &QAction::triggered, *parent, &MainWindow::openFile);
ui->tableWidget->setColumnCount(16);
}
这是产生的错误:
C:\workspace\audioPipe\audioPipe\mainwindow.cpp:76: error: C2664: 'QMetaObject::Connection QObject::connect<void(__cdecl QAction::* )(bool),void(__cdecl MainWindow::* )(void)>(const QAction *,Func1,const MainWindow *,Func2,Qt::ConnectionType)' : cannot convert parameter 3 from 'QWidget' to 'const MainWindow *'
with
[
Func1=void (__cdecl QAction::* )(bool),
Func2=void (__cdecl MainWindow::* )(void)
]
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called