Qt中的connect函数可以让我们动态地管理信号和槽。
比如现在界面上有一个标签,id为label。我现在想要动态地创建一个按键,id为push,然后利用connect函数,实现点击push以后,label上显示“Hello world!”,代码如下:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; private slots: void showLabel(); }; #endif // MAINWINDOW_H
#include "mainwindow.h" #include "ui_mainwindow.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //新建一个按钮,id为push QPushButton * push = new QPushButton(this); //设置按钮的(x,y)坐标、长、宽 push->setGeometry(150, 170, 89, 24); //设置按键上显示的文字 push->setText("button"); //将信号和槽连接 connect(push, SIGNAL(clicked()), this, SLOT(showLabel())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::showLabel() { ui->label->setText("Hello world!"); }
这就实现了动态创建一个控件并连接信号和槽。
题外:这里的信号(SIGNAL)可以通过如下方式找到,即右键ui编辑界面中的一个控件,然后点击转到槽:
但是有时候我们可能需要动态创建多个按键,数量我们也并不清楚。我们希望将其存放在一个数组中,每个按键的功能相似,但是也有略微区别,这个区别和它在数组中的下标有关。举个简单的例子,现在我们有一个私有变量,存放了一个QString的数组,一共5项。我们希望动态地创建一个大小为5的QPushButton数组,实现的功能是点击第i个按键就让label显示第i个QString。代码如下: