在不同级别与Qt小部件交互

时间:2012-11-09 17:30:44

标签: qt

我正在用Qt创建一个GUI,我正在尝试与不同级别的元素进行交互。

#include <QtGui>
#include "mywindow.h"
#include "component.h"
#include "przystanki.h"
MyWindow::MyWindow(QWidget *parent) :
QMainWindow(parent)
{
    webView = new MyWebView(this);
    mainlayout = new QGridLayout();
    mainlayout->addWidget(webView, 0,0);
    Przystanki *stop = new Przystanki(this);
    mainlayout->addWidget(stop, 0, 1);
    QHBoxLayout* bottom = new QHBoxLayout();
    bottom->addWidget(new Component("Linie"));
    bottom->addWidget(new Component("Autobusy"));
    QHBoxLayout* hrightCorner = new QHBoxLayout();
    QVBoxLayout* rightCorner = new QVBoxLayout();
    rightCorner->addStretch(1);
    rightCorner->addWidget(new QPushButton("Start", this));
    rightCorner->addStretch(1);
    hrightCorner->addLayout(rightCorner);
    mainlayout->addLayout(bottom, 1, 0);
    mainlayout->addLayout(hrightCorner, 1, 1);
    hrightCorner->setAlignment(Qt::AlignCenter);
    this->setCentralWidget(new QWidget);
    this->centralWidget()->setLayout(mainlayout);

}

在webView中,我有一个方法,我想在Przystanki类中的列表中添加一个元素。

我该怎么办?是否可以以简单的方式访问它,还是以某种方式重构我的代码? (如果是的话,请给我一些建议,我应该以什么方式去做)。

2 个答案:

答案 0 :(得分:1)

你可以:

  • MyWebView类中添加一个信号,其中包含您要添加的数据作为参数
  • Przystanki类中添加一个与信号具有相同参数类型的插槽
  • 将信号连接到QMainWindow构造函数中的插槽。

这样,MyWebView类不需要知道Przystanki类的任何内容,只需要发出信号。

答案 1 :(得分:0)

您可以实施setter/getter的系统。

我要做的是,在您的班级Webview中,私下创建一个对象Przystanki * przystanik。 Webview.h:

#include "przystanki.h"

class Webview{
    Webview(Przstanki *);
    Przstanki * przystanik;
}

在您的班级Przystanki中创建一个函数getter:type_of_list Przystanki::get_list()。 Przstanki.cpp:

list_type Przstanki::get_list(){
    return list;
}

现在,在Wedview内,您的对象przystanik可以调用get_list:przystanik->get_list()

webview.cpp:

Webview::Webview(Przstanki * stop){
    przystanik = stop;
}

Webview::your_method(){
    Przystanik->get_list();
}