我试图将用户定义的函数与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);
};
答案 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。