for(int i = 0 ; i < vToolBtn.size();i++) { connect(vToolBtn[i],&QToolButton::clicked,[=](){ if(exchangeStatue[i]){ QString str = QString("%1窗口已经被打开了").arg(vToolBtn[i]->text()); QMessageBox::warning(this, "警告", str); return; } //弹出聊天对话框 exchange * e = new exchange(0, nameList[i]); exchangeStatue[i] = true; e->setWindowTitle(nameList[i]); e->show(); e->move(700, 240); connect(e, &exchange::closeWidget, [=](){ exchangeStatue[i] = false; }); }); } }
时间: 2024-02-14 22:20:07 浏览: 23
这是一段Qt代码,用于为之前创建的4个工具按钮添加点击事件处理函数,并在点击按钮时弹出一个聊天对话框。具体来说,代码中使用一个for循环遍历了之前创建的4个工具按钮,为每个按钮都添加了一个&QToolButton::clicked信号的处理函数。在这个处理函数中,首先判断exchangeStatue[i]数组元素的值是否为true,如果是,则说明对应的窗口已经被打开了,弹出一个警告框提示用户并直接返回。否则,创建一个名为e的exchange对象,用于显示聊天对话框。同时将exchangeStatue[i]设置为true,表示对应的窗口已经被打开。接着,设置聊天对话框的标题、显示并移动到指定位置,并为其添加一个&exchange::closeWidget信号的处理函数。这个处理函数会在聊天对话框关闭时被调用,将exchangeStatue[i]重新设置为false,表示对应的窗口已经关闭。
相关问题
QVector <QToolButton *> vToolBtn; for(int i = 0 ; i < 4 ; i++) { //设置头像 QToolButton * btn = new QToolButton; //设置文字 btn->setText(nameList[i]); //设置头像 QString str = QString(":/images/%1.png").arg(i+1); btn->setIcon(QPixmap(str)); //设置头像大小 btn->setIconSize( QPixmap(str).size() ); //设置按钮风格 透明 btn->setAutoRaise(true); //设置文字和图片一起显示 btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //加到 垂直布局中 ui->vLayout->addWidget(btn); //容器保存住9个按钮,方便以后再次操作 vToolBtn.push_back(btn); } for(int i=0; i<9; i++){ exchangeStatue[i] = false; }
这段代码创建了一个包含4个QToolButton的向量vToolBtn,并使用一个for循环为每个按钮设置了图标、文字和风格,并将它们添加到垂直布局中。每个按钮的图标都是从一个文件夹中加载的,文件名为"数字.png",在这个例子中,数字从1到4。每个按钮的风格设置为Qt::ToolButtonTextBesideIcon,这意味着它们将文字和图标一起显示。接下来,使用另一个for循环,将exchangeStatue数组的每个元素初始化为false。这个数组的作用不太清楚,可能在后面的代码中有用到。
connect(vToolBtn[i],&QToolButton::clicked,[=](){
这是一段Qt代码,用于将一个&QToolButton::clicked信号连接到一个Lambda表达式上。具体来说,代码中使用了Qt的connect函数,将vToolBtn[i]的clicked信号连接到一个Lambda表达式上。这个Lambda表达式使用了捕获列表[=],表示以值捕获所有外部变量。在Lambda表达式的主体部分,实现了点击工具按钮时的处理逻辑。