我有一个子部件(它是我的 MainWindow
的配置对话框),上面有一个 QTableWidget
。
面板设置对话框.h:
public:
explicit PanelSettingsDialog(QWidget *parent = 0);
~PanelSettingsDialog();
public:
QTableWidget *tableWidget;
private:
PanelSettingsDialog *panelSettingsDialog;
面板设置对话框.cpp:
#include "panelsettingsdialog.h"
#include "ui_panelsettingsdialog.h"
#include <QCheckBox>
PanelSettingsDialog::PanelSettingsDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::PanelSettingsDialog)
{
ui->setupUi(this);
setWindowTitle("Channel Settings & Panel Configuration");
tableWidget = new QTableWidget(this);
tableWidget
按预期填充(我添加了 5 行虚拟数据)。
现在我打算通过遍历每一行,使用 panelSettings->tableWidget->rowCount 从我的
语句,但在尝试使用 MainWindow
类访问这个有用的 QTableWidget
信息()rowCount()
时出现读取访问错误:
主窗口.cpp:
void MainWindow::configure_panels()
{
const int totalRowCount = panelSettingsDialog->tableWidget->rowCount();
}
此处中断,并显示以下错误消息:
因以下原因在线程 0 中停止:异常发生在 0x64098ffa,代码:0xc0000005:读取访问冲突发生在:0x0,标志 = 0x0(第一次机会)。
如果我无法从另一个子类的小部件项目中读取,将QTableWidget
数据传递给MainWindow
以便它可以迭代的好方法是什么?
@切尔诺贝利,也许你有答案。
最佳答案
tableWidget
应该是私有(private)的。当我们用 Qt Designer 编写应用程序时,我们总是在私有(private)部分使用我们的 ui
,因为如果我们将它作为公共(public)部分使用,我们就会遇到问题。我们应该把这些东西分开。 tableWidget 应该是私有(private)的,但我们应该提供一些公共(public)方法来做我们想做的事情。我认为您可以使用 getter 和 setter。
例如:
对话框.h
public:
int getRowCountData();
对话框.cpp
int Dialog::getRowCountData()
{
return ui->tableWidget->rowCount();
}
//... somewhere in constructor
ui->tableWidget->setColumnCount(1);
for(int r=0;r<7;r++)
{
ui->tableWidget->insertRow(r);
ui->tableWidget->setCellWidget(r,0,new QCheckBox(QString("checkBox%1").arg(r)));
}
用法:
void MainWindow::on_newForm_clicked()
{
Dialog *mDialog = new Dialog;
mDialog->setModal(true);
mDialog->show();
qDebug() << mDialog->getRowCountData();
}
您会看到 7
。等等。
编辑(相同结构):
QString getCellData(int row,int col);//in header
在.cpp 中
QString Dialog::getCellData(int row, int col)
{
QCheckBox* curBox = qobject_cast<QCheckBox*>(ui->tableWidget->cellWidget(row,col));
if(curBox)
{
return curBox->text();
}
return QString();
}
用法:
Dialog *mDialog = new Dialog;
mDialog->show();
qDebug() << mDialog->getRowCountData();
for(int r=0;r<7;r++)
{
QString txt = mDialog->getCellData(r,0);
if(!txt.isNull())
qDebug() << txt;
else
qDebug() << "fail";
}
关于c++ - 从另一个类访问 QTableWidget 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25872862/