gpt4 book ai didi

c++ - 在类之间传输数据

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:25 25 4
gpt4 key购买 nike

我的代码是这样设置的:带有 QTableWidget 的主窗口,以及使用与 MainWindow 不同的类创建的控制面板。在控制面板控件中有一个 QListWidget,我想从其中加载表头的标题,但是 QTableWidget 是私有(private)的,我如何在两个类之间传递数据?

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "QControlPanel.h"
#include <QMainWindow>
#include <QWidget>
#include <QtGui>
#include <QTableWidget>


namespace Ui {
class MainWindow;
class GenerateXML;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);

~MainWindow();

public slots:

private:
Ui::MainWindow *ui;
QTableWidget* m_pTableWidget;
QControlPanel* preferences;
};

#endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{

this->setWindowIcon(QIcon("DrawItem.ico"));
this->setWindowTitle("DrawItem");
resize(890, 475);

m_pTableWidget = new QTableWidget(this);
m_TableHeader<<"A"<<"B"<<"C"<<"D"<<"E";
m_pTableWidget->setHorizontalHeaderLabels(m_TableHeader);
m_pTableWidget->resizeColumnsToContents();
m_pTableWidget->verticalHeader()->setVisible(false);
m_pTableWidget->move(30, 75);
m_pTableWidget->resize(410, 151);

preferences = new QControlPanel(this);
}

QControlPanel.h

#include <QDialog>
#include <QTableWidget>

#ifndef QCONTROLPANEL_H
#define QCONTROLPANEL_H

class QControlPanel : public QDialog
{
Q_OBJECT

public:
explicit QControlPanel(QWidget *parent = 0);

~QControlPanel();

public slots:
void customHeader(QTableWidget *table);

private:
QListWidget *headerlist;

private slots:

};

#endif

QControlPanel.cpp

#include "QControlPanel.h"

QControlPanel::QControlPanel(QWidget *parent) :
QDialog(parent)
{
headerlist = new QListWidget(inputHeader);
headerlist->setGeometry(140, 15, 140, 130);
}

最佳答案

您可以在 QControlPanel 类中使用一个信号来检索 header 。所以 QControlPanel 可以像这样:

class QControlPanel : public QDialog
{
Q_OBJECT

public:
explicit QControlPanel(QWidget *parent = 0);

~QControlPanel();

signals:

QStringList getHeaders();

private:
QListWidget *headerlist;
};

并将 getHeaders() 信号连接到包含列列表的类的插槽以检索它们。这应该在 MainWindow 的构造函数中完成:

connect(preferences,SIGNAL(getHeaders()),this,SLOT(getTableHeader()));

getTableHeader()MainWindow 中的一个插槽,它返回标题列:

QStringList getTableHeader()
{
return m_TableHeader;
}

现在您可以访问 QControlPanel 中的标题:

QControlPanel::QControlPanel(QWidget *parent) :
QDialog(parent)
{
headerlist = new QListWidget();
headerlist->insertItems(0, getHeaders());
}

关于c++ - 在类之间传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24130875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com