使用QObject :: connect()时类型签名是否重要,用于将函数连接到信号?

时间:2014-09-25 19:52:07

标签: c++ qt function

我试图将用户定义的函数与QComboBox activate()信号连接起来,就像这样(在mainwindow.cpp中):

QObject::connect(ui->comboBox, SIGNAL(activated(QString)), obj.sChange());

然后定义sChange函数:

void MainWindow::sChange(QString str)
    {
        //Some code here.
    }

它在QObject :: connect()行给出了一个错误,即无效使用void表达式。 我做错了什么?

编辑:这是我的完整主窗口。

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    //void sChange(QString);

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;

public slots:
    void sChange(QString);
};

2 个答案:

答案 0 :(得分:3)

尝试:

QObject::connect(ui->comboBox, SIGNAL(activated(QString)), this, SLOT(sChange(QString)));

并确保MainWindow在类的顶部有Q_OBJECT宏,并且标题sChange()中的宏被声明为公共插槽:(或受保护或其他)。我假设这个连接在主窗口代码中的某处完成,否则用指向MainWindow的指针替换'this'。

此外,如果这是一个comboBox的实例而不是指向一个的指针,你可能需要做& ui-> comboBox。

答案 1 :(得分:2)

Qt支持不同的方式来连接信号和插槽:

connect(ui->comboBox, SIGNAL(activated(QString)), this, SLOT(sChange(QString)));

connect(ui->comboBox, &QComboBox::activated, this, &MainWindow::sChange);

后面的语法在Qt 5中是新的,需要C ++ 11。