gpt4 book ai didi

c++ - QT类之间的连接

转载 作者:行者123 更新时间:2023-11-28 07:03:04 25 4
gpt4 key购买 nike

我想我在做对这件事时遇到了一些麻烦:我有一个 QMainWindow 类。在我的程序中,我想创建其他类,例如用于输入处理、计算...

现在首先从我的主窗口类发送到我的文件选择器(文件处理程序)类以打开文件对话框,从而在内部保存选定的文件。不幸的是,我在连接插槽时遇到了麻烦。

主窗口:

MA_FEX::MA_FEX(QWidget *parent)
: QMainWindow(parent), fileSelector(this)

{
ui.setupUi(this);
//this works:
fileSelector.openFiles(this);
//this doesn't:
connect(ui.actionOpenFiles, SIGNAL(triggered()), fileSelector, SLOT(openFiles(this)));
}

MA_FEX::~MA_FEX()
{
}

主窗口标题:

class MA_FEX : public QMainWindow
{
Q_OBJECT

public:
MA_FEX(QWidget *parent = 0);
~MA_FEX();

private:
Ui::MA_FEXClass ui;
FileSelection fileSelector;
};

文件协调类:

FileSelection::FileSelection(QObject *parent)
: QObject(parent)
{
}

FileSelection::~FileSelection()
{
}

void FileSelection::openFiles(QWidget *parent){

QStringList files = QFileDialog::getOpenFileNames(
parent,
"Select one or more files to open",
"c:",
"Images (*.csv *.txt )");

}

标题:

class FileSelection : public QObject
{
Q_OBJECT

public:
FileSelection(QObject *parent);
~FileSelection();

public slots:
void openFiles(QWidget *parent);

private:

};

我错过了什么吗?执行时我在连接线上收到错误 C2664,指出参数 3“FileSelection”无法转换为“const QObject”。

最佳答案

查看 QObject::connect 的声明:

QObject::connect(const QObject * sender, const char * signal,
const QObject * receiver, const char * method,
Qt::ConnectionType type = Qt::AutoConnection);

它接受指针,因此您需要将指针传递给 fileSelector

另一个问题是 SIGNAL 和 SLOT 不兼容。 connect 中的插槽规范是声明,因此您不能像使用 this 那样传递参数。如果您使用 Qt 5 和 C++11,您可以通过传递 lambda 而不是插槽规范来实现:

QObject::connect(ui.actionOpenFiles, &QAction::triggered, 
[this]() { fileSelector.openFiles(this); });

对于 Qt 4,您需要在 MA_FEX 类中创建包装槽,它不带任何参数,并且会调用 fileSelector 的槽:

class MA_FEX {
...
Q_SLOT void openFileSelector() { fileSelector.openFiles(this); }
...
public:
MA_FEX(QWidget *parent) : QMainWindow(parent), fileSelector(this) {
ui.setupUi(this);
connect(ui.actionOpenFiles, SIGNAL(triggered()), SLOT(openFileSelector()));
}
...
};

关于c++ - QT类之间的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22150226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com