基本上我有一個表格小部件。該表中的 2 列分別包含直徑和面積。
當我輸入直徑時,我基本上想要在相應的單元格中計算面積。如果我進入該區域,則同樣計算直徑。
我做了一個連接函式,當一個單元格發生變化時發送一個信號,這用于檢測行和列以確切地知道哪個單元格,而 SLOT 是發生計算的函式。所以這:
QObject::connect(TabUI.tableWidget, &QTableWidget::itemChanged, this, &Pressurator::CalculateArea);
還有這個:
void Pressurator::CalculateArea(QTableWidgetItem *item)
{
// QTableWidgetItem * item = new QTableWidgetItem;
// double area = 0;
// QDoubleSpinBox * diameter_SB = static_cast<QDoubleSpinBox*>(TabUI.tableWidget->cellWidget(item->row(),0));
// QDoubleSpinBox * area_SB = static_cast<QDoubleSpinBox*>(TabUI.tableWidget->cellWidget(item->row(),1));
// area = M_PI * qPow(diameter_SB->value()/2, 2);
// area_SB->setValue(area);
row = item->row();
column = item->column();
qDebug()<<"DETECTED--->"<<row<<" | "<<column;
if(column == 0){
diameter = TabUI.tableWidget->item(row,0)->text().toDouble();
qDebug()<<"Diameter: "<<diameter<<Qt::endl;
area = M_PI * qPow(diameter/2, 2);
qDebug()<<"Area: "<<area<<Qt::endl;
TabUI.tableWidget->item(row,1)->setText(QString::number(area, 'f', 6));
}else if(column == 1){
area = TabUI.tableWidget->item(row,1)->text().toDouble();
diameter = qSqrt((4* area)/M_PI);
TabUI.tableWidget->item(row,0)->setText(QString::number(diameter, 'f', 6));
}
在其中一個單元格中輸入資料后,我的應用程式不斷崩潰,所以我真的不知道如何繼續或崩潰的原因。
uj5u.com熱心網友回復:
我剛剛在構造我的表單(不在CalculateArea函式中)時定義了我的tableWidget,如下所示:
QTableWidget* tableWidget = new QTableWidget();
tableWidget->setRowCount(1);
tableWidget->setColumnCount(2);
QTableWidgetItem* item = new QTableWidgetItem("1.0");
QTableWidgetItem* item2 = new QTableWidgetItem("0.785398");
tableWidget->setItem(0, 0, item);
tableWidget->setItem(0, 1, item2);
tableWidget->show();
在 QTableWidget 類中,只要 item 的資料發生變化,就會發出信號“itemChanged”。在“CalculateArea”插槽的定義中,您正在嘗試設定導致發出另一個信號的資料。所以它會卡在堆疊溢位中。您可以在嘗試設定資料之前阻止信號。
row = item->row();
column = item->column();
TabUI.tableWidget->blockSignals(true);
.
. // Set your data (if / else if) ...
.
TabUI.tableWidget->blockSignals(false);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/464924.html
標籤:C qt qtablewidget
上一篇:Rails7系統測驗由于模型回呼而出錯,我該如何解決這個問題?
下一篇:缺少PyQt5二進制檔案
