创建多个带有通过阀的QDialog
Create Multiple QDialog with pass in valve
我有一个主窗口,它可以从MySQL进行一些搜索, 例如。如果我输入"abc",它将搜索所有带有"abc"的电子邮件, 然后它会将所有结果插入到 QTableWidget 并显示它, 如果我双击其中任何一个, 它将通过 show() 创建一个 QDialog 并传递我通过 SIGNAL/SLOT 单击的电子邮件, 问题是,我想在必要时创建多个QDialog。通过双击另一封电子邮件,它应该会创建另一个QDialog,但是每次我打开一个新的QDialog时, 我传入的所有电子邮件都将更改为我单击的最后一个电子邮件,希望有人可以教我发生了什么。
这是我的主窗口双击功能
void MainWindow::on_tableWidget_cellDoubleClicked(int row, int column)
{
auto resule = ui->tableWidget->item(row, 1);
Dialog* dialog = new Dialog(this);
connect(this, SIGNAL(sendTargetEmail(QString)), dialog, SLOT(receiveTargetEmail(QString)));
dialog->show();
emit sendTargetEmail(resule->text());
}
这是我的QDialog函数
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog){
ui->setupUi(this);
label1 = new QLabel("Email:", this);
label1->setGeometry(10, 30, 50, 20);
emailLabel = new QLabel(this);
emailLabel->setGeometry(60, 30, 160, 20);
}
void Dialog::receiveTargetEmail(QString email){
m_email = email ;
emailLabel->setText(m_email);
}
所有对话框实例都将受到连接的信号/插槽的影响,所有先前创建的对话框也将调用该插槽。
... .. 所以你所有的对话框标签文本都会变成最新的email
字符串!
如果出于某种原因想保持信号/槽连接,则不要使用槽来设置标签文本,可以直接将文本设置为实例:
Dialog* dialog = new Dialog(this);
connect(this, SIGNAL(sendTargetEmail(QString)), dialog, SLOT(receiveTargetEmail(QString)));
dialog->emailLabel->setText(resule);
dialog->show();
emit sendTargetEmail(resule);
并从插槽中移除此行:
emailLabel->setText(m_email);
编辑
使用new
创建Dialog
时,您将动态创建该对象。它将保留在内存中,除非它被显式销毁或当它的父级被销毁时。每次创建Dialog
实例时,您还会与receiveTargetEmail(QString)
建立连接。这种连接也是永久性的,除非该QDialog
被破坏。
每当您发出sedTargetEmail()
都会触发您之前创建的Dialog
的每个实例的receiveTargetEmail(QString)
槽。无需与 SIGNAL/SLOT 建立连接,您可以直接调用该函数。这将确保只有您创建的最后一个QDialog接收文本。
void MainWindow::on_tableWidget_cellDoubleClicked(int row, int column)
{
auto resule = ui->tableWidget->item(row, 1);
Dialog* dialog = new Dialog(this);
dialog->receiveTargetEmail(resule->text());
dialog->show();
emit sendTargetEmail(resule->text()); //you may have other things planned for the signal so you can leave it as is, depending on your design
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- Qt5自定义QDialog,不使用qt创建器
- 在主线程中创建 QDialog
- 创建多个带有通过阀的QDialog
- 在Qt中创建类,其中QDialog内置特定对话框
- Qt:当主窗口被模式QDialog阻止时,如何聚焦从主窗口创建的无模式QDialog
- 显示QtDesigner中创建的QDialog
- QDialog创建后闪回