0

我正在尝试使用 QAction(QMenu 成员条目)打开一个新窗口。准确地说:我想要actionAbout预定义的信号activated以匹配MainWindow自定义插槽open AboutWindow- 这就是我遇到的麻烦。

我知道我可以connect在源 main_window.cpp 文件中手动使用 Qt 函数,或者只是在 Qt Creator 中单击它,但是我的自定义插槽没有显示,所以我无法选择它。也许我的槽函数声明是错误的(无效参数),这就是为什么 QtCreator 不允许我在 GUI 中选择我的自定义槽signals & slots。谁能指出我应该怎么做才能让 QtCreator 在下拉列表中显示我的自定义插槽以及连接函数调用应该如何?

这是我的 main_window.h 文件内容:

#包括
#include “about_window.h”

命名空间 ui {
    类主窗口;
}

类 MainWindow : 公共 QMainWindow
{
    Q_OBJECT

上市:
    显式 MainWindow(QWidget *parent = 0);
    〜主窗口();

公共插槽:
   无效 openAboutWindow();

私人的:
    ui::主窗口 *ui;
    Ui::AboutWindow *aboutWindow;
};

这是 main_window.cpp:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(父),
    ui(新的 Ui::MainWindow)
{
    ui->setupUi(这个);
    连接(actionAbout,信号(激活()),这个,SLOT(openAboutWindow(这个));
}

主窗口::~主窗口()
{
    删除用户界面;
}

无效 MainWindow::openAboutWindow(QWidget *parent)
{
   aboutWindow = new Ui::AboutWindow(parent); // 一定要在某个地方销毁你的窗口
   aboutWindow->show();
}

编译器对构造函数和 openAbutWindow 大喊大叫:

../Application/main_window.cpp:在构造函数'MainWindow::MainWindow(QWidget*)'中:
../Application/main_window.cpp:9:13:错误:未在此范围内声明“actionAbout”
../Application/main_window.cpp:9:80: 错误:在 ';' 之前预期 ')' 令牌
../Application/main_window.cpp:在成员函数'void MainWindow::openAboutWindow(QWidget*)'中:
../Application/main_window.cpp:19:44:错误:无效使用不完整类型'struct Ui::AboutWindow'
../Application/about_window.h:7:11: 错误:'struct Ui::AboutWindow' 的前向声明
../Application/main_window.cpp:20:15:错误:无效使用不完整类型'struct Ui::AboutWindow'
../Application/about_window.h:7:11: 错误:'struct Ui::AboutWindow' 的前向声明
4

1 回答 1

1
../Application/main_window.cpp:9:13: error: ‘actionAbout’ was not declared in this scope

错误信息说明了一切,QAction定义在哪里?应该是ui->actionAbout吗?

connect(actionAbout, SIGNAL(activated()), this, SLOT(openAboutWindow(this));

openAboutWindow()不接受任何参数,并且不管this是实例不是类型。

于 2013-01-26T10:33:10.900 回答