Odwołanie sie do obiekty z innej klasy
Solved
Polish
-
Witam pisze program do zarządzania próbkami. ```
void MainWindow::readFile(QString fileName)
{ui->tableWidget->setColumnCount(7); ui->tableWidget->setSelectionMode(QAbstractItemView::MultiSelection); QStringList header; header << "Zaznacz" << "Nr. kartonu" << "Typ uszczelki" << "Średnica" << "Grubość" << "Gestość" << "Uwagi"; ui->tableWidget->setHorizontalHeaderLabels(header); QFile file (fileName); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug()<<"File Open Failed" ; } QTextStream in(&file); QList <QString> vector; int rowCount = 0; while(!in.atEnd())
{
QString line =in.readLine();
vector.append(line.split(","));
ui->tableWidget->insertRow(rowCount);QTableWidgetItem *select = new QTableWidgetItem; QTableWidgetItem *nr_kartonu = new QTableWidgetItem; QTableWidgetItem *typ_uszczelki = new QTableWidgetItem; QTableWidgetItem *srednica = new QTableWidgetItem; QTableWidgetItem *grubosc = new QTableWidgetItem; QTableWidgetItem *gestosc = new QTableWidgetItem; QTableWidgetItem *uwagi = new QTableWidgetItem; select->setCheckState(Qt::Unchecked); nr_kartonu->setText(vector[rowCount*6]); typ_uszczelki->setText(vector[(rowCount*6)+1]); srednica->setText(vector[(rowCount*6)+2]); grubosc->setText(vector[(rowCount*6)+3]); gestosc->setText(vector[(rowCount*6)+4]); uwagi->setText(vector[(rowCount*6)+5]); ui->tableWidget->setItem(rowCount,0,select); ui->tableWidget->setItem(rowCount,1,nr_kartonu); ui->tableWidget->setItem(rowCount,2,typ_uszczelki); ui->tableWidget->setItem(rowCount,3,srednica); ui->tableWidget->setItem(rowCount,4,grubosc); ui->tableWidget->setItem(rowCount,5,gestosc); ui->tableWidget->setItem(rowCount,6,uwagi); rowCount++; } file.flush(); file.close();
}
Tworze tabele i pobieram dane z pliku Sworzyłem QDialog z TextEdit z którego w którym urzytkownik wpisuje szukane wartosci.
void Szukaj::on_buttonBox_accepted() { QString wynik; QString rodzaj = ui->comboBox->currentText(); QString srednica = ui->lineEdit->text(); QString grubosc = ui->lineEdit_2->text(); QString gestosc = ui->lineEdit_3->text(); MainWindow q; q.pokaz(srednica); }
i chciałym po kliknieciu "OK" wywyołać w tabeli funkcję
void MainWindow::pokaz(QString srednica) { int rows = ui->tableWidget->rowCount(); for(int i = 0; i < rows; i++) { if(ui->tableWidget->item(i, 2)->text() == srednica) //&& ui->tableWidget->item(i, 3)->text() == srednica) { ui->tableWidget->selectRow(i); } } }
Tylko nie wiem jak dostać sie do obiektu utworzonego innej klasie.
-
Ten QDialog musi być utworzony gdzieś. Możesz to zrobić w swoim głównym oknie, wtedy komunikacja będzie prosta. Np.:
void MainWindow::showDialog() { auto dialog = new Szukaj(this); connect(dialog, &QDialog::accepted, this, [=]() { pokaz(dialog->srednica()); dialog->hide(); dialog->deleteLater(); }); dialog->show(); }
Parę innych uwag:
- teksty widoczne dla użytkowników powinny być opięte w funkcje tłumaczące:
tr("Typ uszczelki")
- przekazując QString (i wszelkie inne "duże" klasy z Qt) do funkcji, używaj const ref:
void MainWindow::pokaz(const QString &srednica)
- polecam programować wyłącznie po angielsku, takie mieszanie języków jest dość mylące. No i nie do użycia w międzynarodowej drużynie
- ten kod zdecydowanie wyrzuć:
MainWindow q; q.pokaz(srednica);
Bo on tworzy nowe okno MainWindow, a tego raczej nie chcesz.
- teksty widoczne dla użytkowników powinny być opięte w funkcje tłumaczące: