0

我正在使用 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
4

1 回答 1

0

编译器告诉您,作为 connect() 的第三个参数,它需要一个指向 MainWindow 的指针,即const MainWindow *. 但是你通过*parent了,这是 type QWidget。此外,parent无论如何都是错误的对象,因为它是 MainWindow 对象的父对象,但是您想传递 MainWindow 对象本身 - 那就是this.

所以像下面这样的东西应该可以工作:

    QObject::connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::openFile);
于 2013-06-19T21:03:56.667 回答