我的代码是通过以下方式设置的:具有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/

10-08 22:24