当前位置:  开发笔记 > 编程语言 > 正文

无法将信号连接到main()内的函数

如何解决《无法将信号连接到main()内的函数》经验,为你挑选了1个好方法。

我知道要在类中使用Qt的信号和插槽机制,该类必须包含Q_OBJECT宏,但我试图使用信号和插槽main(),而不使用任何类.

到目前为止,这是我的代码:

#include 
#include 
#include 
#include 

void saveText();

int main(int argv, char **args)
 {
    QApplication app(argv, args);
    QTextEdit textEdit;
    QPushButton saveButton("Save!");
    QPushButton exitButton("Exit!");
    QObject::connect(&exitButton,SIGNAL(clicked()),qApp,SLOT(quit()));
    QObject::connect(&saveButton,SIGNAL(clicked()),qApp,SLOT(saveText()));

    QVBoxLayout vlyt;
    vlyt.addWidget(&textEdit);
    vlyt.addWidget(&exitButton);
    vlyt.addWidget(&saveButton);

    QWidget mainWindow;
    mainWindow.setLayout(&vlyt);
    mainWindow.show();

    return app.exec();
}

void saveText()
{
    exit(0);
}

这是生成的GUI窗口:

GUI窗口

从上面的代码中,退出按钮连接到quit(),这是一个Qt函数,当点击它工作.分配给该功能的保存按钮saveText()配置为退出,但不执行此操作.

请告诉我在理解Qt中的信号和插槽时出错了.



1> masoud..:

Qt4的...

从QObject或其子类之一(例如,QWidget)继承的所有类都可以包含信号和槽.1

因此,您不能使用放置在QObject儿童之外的插槽.

您可以将信号连接到派生自的类中的插槽QObject.将您的插槽放在一个分开的.h/.cpp文件中的类中:

class MyClass : public QObject
{
   Q_OBJECT

   ...

   public slots:
     void saveText();

};

根据Qt5:Qt 5中的新信号槽语法.您可以连接到这些类型的全局函数.(感谢@ thuga的评论)


@MM.[这里](http://qt-project.org/wiki/New_Signal_Slot_Syntax)它说`新语法甚至可以连接到函数,而不仅仅是QObjects`.您还可以查看[this](http://stackoverflow.com/questions/16728197/connecting-button-to-an-arbitrary-function)问题.
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有