1.ComboBox
提供的信号
void activated(int index)
void activated(const QString & text)
void currentIndexChanged(int index)
void currentIndexChanged(const QString & text)
void editTextChanged(const QString & text)
void highlighted(int index)
void highlighted(const QString & text)
2.connect()
与 QComboBox
在
Qt
中,可以使用connect()
函数连接QComboBox
控件的信号和槽,实现响应用户操作的交互式功能。
QComboBox
控件中的一些常见信号包括currentIndexChanged
、currentTextChanged
等。可以使用这些信号来响应用户选择一个新项的操作,并根据用户的选择来执行相应的操作。
以下是一个连接
QComboBox
控件信号的示例代码:
#include <QApplication>
#include <QWidget>
#include <QComboBox>
#include <QDebug>
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = nullptr)
: QWidget(parent)
{
QComboBox *combo_box = new QComboBox(this);
combo_box->addItem("Qt");
combo_box->addItem("Python");
combo_box->addItem("C++");
connect(combo_box, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &MyWidget::onComboBoxIndexChanged);
}
private slots:
void onComboBoxIndexChanged(int index)
{
qDebug() << "Index changed to " << index;
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
w.show();
return a.exec();
}
在这个例子中,首先创建了一个
QComboBox
对象,并向其中添加了三个选项。
然后,使用connect()
函数连接了QComboBox
的currentIndexChanged
信号和一个自定义槽函数onComboBoxIndexChanged()
。
该自定义槽函数根据新的选项索引index
,输出了一条调试信息。
在该程序执行时,每当用户在
QComboBox
中选择了一个新项时,都会触发currentIndexChanged
信号,并调用自定义的槽函数onComboBoxIndexChanged()
。
该自定义槽函数根据新的选项索引,输出相应的调试信息。
需要注意的是,
QComboBox
控件还有其他一些可用的信号,例如activated
、highlighted
等。可以根据具体的需求来选择使用。
同时,需要注意使用connect()
函数连接信号和槽时,需要使用正确的信号和槽的参数类型。
在本例中,我们使用了QOverload<int>::of()
方法来选择使用传递一个整数参数的版本的currentIndexChanged
信号。
2.1例句分析
connect(combo_box, QOverload<int>::of(&QComboBox::currentIndexChanged),this, &MyWidget::onComboBoxIndexChanged);
这段代码使用
Qt
的信号与槽机制,将QComboBox
组件的currentIndexChanged
信号连接到MyWidget
类中的onComboBoxIndexChanged
槽函数,即当QComboBox
组件当前选中项改变时,自动触发onComboBoxIndexChanged
槽函数。
具体分析如下:
connect() 函数原型如下:
bool QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
第一个参数
sender
是发送信号的对象,类型为const QObject *
,在本例中为combo_box
。
第二个参数
signal
是信号的名称,类型为const char *
,在本例中是QComboBox::currentIndexChanged
。
第三个参数
receiver
是接收信号的对象,类型为const QObject *
,在本例中是this
,即MyWidget
类的一个实例。
第四个参数
method
是接收信号的槽函数的名称,类型为const char *
,在本例中是onComboBoxIndexChanged
。
信号
QComboBox::currentIndexChanged
是在选中项改变时发出的,该信号是QComboBox
组件的一个默认信号,由QComboBox
类的currentIndexChanged(int index)
成员函数发出。它通过了一个代表当前选中项的整数索引值。
在
MyWidget
类中,该槽函数onComboBoxIndexChanged
的原型如下:
void MyWidget::onComboBoxIndexChanged(int index);
该槽函数是
MyWidget
类中的一个成员函数,用于处理QComboBox
组件的选中项改变所触发的信号。
因此,这段代码使用
connect()
函数将combo_box
组件的currentIndexChanged()
信号连接到MyWidget
类的onComboBoxIndexChanged
槽函数,当combo_box
组件的选中项改变时,自动触发onComboBoxIndexChanged
槽函数。在onComboBoxIndexChanged
槽函数中,可以通过index
参数获取当前选中项的索引值,并进行相应的处理。
2.1.1将 QComboBox
组件的 currentIndexChanged
信号换成 activated
信号重写一下上面的语句
如果将
QComboBox
组件的信号从currentIndexChanged
换成activated
信号,需要在connect()
函数的第二个参数中将QOverload<int>::of(&QComboBox::currentIndexChanged)
替换成&QComboBox::activated
。具体代码如下:
connect(combo_box, &QComboBox::activated, this, &MyWidget::onComboBoxIndexChanged);
在这段代码中,我们将
combo_box
的activated
信号与MyWidget
的onComboBoxIndexChanged
槽函数连接在一起。activated
信号在用户选择下拉框中一个选项并单击以便选中它时发出,可以获得相应的选项文本。在onComboBoxIndexChanged
槽函数中,可以通过combo_box->currentText()
函数获取当前所选中的文本,并进行相应的处理,代码如下:
void MyWidget::onComboBoxIndexChanged()
{
QString currentText = combo_box->currentText(); // 获取当前选中项的文本
// 进行相应的处理
}
需要注意的是,在
activated
信号下,我们不再需要传递一个整数索引值作为参数,直接调用combo_box->currentText()
即可获取当前选中项的文本。
2.2.例句分析
connect(ui->PortBox, &QComboBox::activated, this, (&)[]{});
这段代码存在两个错误:
在
connect()
函数中,&
符号是用于获取对象的地址,但放置在(&)
中间是不必要的,我们只需要使用&QComboBox::activated
即可获取QComboBox
组件的activated
信号。
在连接
activated
信号和槽函数时,没有指定要调用的槽函数。(&)[]{}
语法是Lambda
表达式(匿名函数),但它的参数列表和返回值类型都为空,所以编译器会认为这是一个无效的语法,而导致错误。
因此,正确的语法应该为:
connect(ui->PortBox, QOverload<int>::of(&QComboBox::activated), this, &MyWidget::onPortBoxActivated);
在这段代码中,我们指定了要连接的
QComboBox
组件的activated
信号和this
所指向的MyWidget
类中的onPortBoxActivated
槽函数。在onPortBoxActivated
槽函数中,我们可以通过ui->PortBox->currentIndex()
函数获取当前选中项的整数索引值,并进行相应的处理,代码如下:
void MyWidget::onPortBoxActivated(int index)
{
// 获取当前选中项的索引值和文本
int currentIndex = ui->PortBox->currentIndex();
QString currentText = ui->PortBox->currentText();
// 进行相应的处理
}
需要注意的是,使用
QOverload<int>::of(&QComboBox::activated)
时需要包含#include <QOverload>
头文件,该头文件提供了重载函数指针的支持。