我的代码是通过以下方式设置的:具有QTableWidget的主窗口,以及使用与MainWindow不同的类创建的控制面板。在控制面板控件中,有一个QListWidget,我想从中加载表头的标题,但由于QTableWidget是私有的,如何在两个类之间传递数据?
主窗口
#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
主窗口
#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
类中有一个信号来检索标题。所以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/