- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个主窗口,它可以从 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
}
关于c++ - 使用传入阀创建多个 QDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49436674/
在同一个 Tomcat 上下文配置中是否可以有多个 validator Valves?我知道你可以通过 CombinedRealm 拥有多个领域,但是不同的身份验证方法呢? 我必须更新 Web 应用程
我写了一个Tomcat valve,配置在server.xml里。到目前为止,一切都很好。但是,我希望阀门的数据成员之一是 Spring 管理的 bean。那么,我怎样才能使阀门也由 Spring 管
我是一名优秀的程序员,十分优秀!