从另一个类访问 QTableWidget 的数据
Accessing QTableWidget's data from another class
我有一个子部件(它是我的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()
:时会出现读取访问错误
mainwindow.cpp:
void MainWindow::configure_panels()
{
const int totalRowCount = panelSettingsDialog->tableWidget->rowCount();
}
此处中断,并显示以下错误消息:
在线程0中停止的原因:0x64098ffa处出现异常,代码:0xc0000005:0x0处出现读取访问冲突,flags=0x0(第一次机会)
如果我无法读取另一个子类的小部件项,那么将QTableWidget
数据传递给MainWindow
以便进行迭代的好方法是什么?
@切尔诺贝利,也许你有答案。
tableWidget
应该是私有的。当我们用Qt Designer编写应用程序时,我们总是在私有部分使用ui
,因为如果我们将其用作公共部分,我们可能会遇到问题。我们应该把这些东西分开。tableWidget应该是私有的,但我们应该提供一些公共方法,以实现我们想要的功能。我认为你可以使用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
In.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++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 数据排序依据是哪一列,QTableWidget
- QtableWidget不显示数据
- 从另一个类访问 QTableWidget 的数据