Qt / C ++:从另一个班级

时间:2016-03-23 10:53:07

标签: c++ qt user-interface

我试图进行一个简单的测试,以使用由" Qt Design"制作的UI对象。但我对Qt和C ++很陌生。 我有一个非常简单的Ui:3 LineEdit s和1 PushButtonIMAGE : the UI window

我是一个应该控制Ui的客户端类。它连接了QPushButton,它应该从QLineEdit获取内容。 但是当我按下按钮时,QDebug的结果始终相同,即使我更改了QlineEdit字段:"客户端连接:"" :0"

此外,如果我使用QtDesign制作的 on_pushButton_clicked ,它将显示QlineEdit s的实际值。

为什么QString总是一样的?我是否传递了初始对象的副本?怎么解决?

这是制作ViewController的好方法吗?另外,有什么好方法?

Client.cpp

#include "client.h"
#include "mainwindow.h"
#include "logwindow.h"

Client::Client()
{
    LogWindow* w1 = new LogWindow();
    MainWindow* w2 = new MainWindow();

    _stack = new QStackedWidget();
    _stack->addWidget(w1);
     connect(w1->getButton(),SIGNAL(clicked()),this,SLOT(connexion()));

    _stack->addWidget(w2);
    _stack->show();
}

//When the button is Pushed, gets the content from QlineEdits and prints them
void Client::connexion()
{
    QString ip=(LogWindow (_stack->currentWidget())).getIP();
    int port=((LogWindow (_stack->currentWidget())).getPort()).toInt();

    socket = new QTcpSocket(this);
    socket->connectToHost(ip, port);

    _stack->setCurrentIndex((_stack->currentIndex()+1)%_stack->count());
    qDebug() <<"Client connected : " << ip << ":"<<port;
}

由Qt自动制作的课程:

LogWindow.cpp

#include "logwindow.h"
#include "ui_logwindow.h"



LogWindow::LogWindow(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LogWindow)
{
    ui->setupUi(this);
}

LogWindow::~LogWindow()
{
    delete ui;
}


QPushButton* LogWindow::getButton()
{
    return ui->pushButton;
}

QString LogWindow::getIP()
{
    //LineEdit named "IP_text"
    return ui->IP_text->text();
}

QString LogWindow::getPort()
{
    //LineEdit named "Port_text"
    return ui->Port_text->text();
}

LogWindow.h

namespace Ui {
class LogWindow;
}

class LogWindow : public QWidget
{
    Q_OBJECT

public:
    explicit LogWindow(QWidget *parent = 0);
    ~LogWindow();
    QPushButton* getButton();
    QString getIP();
    QString getPort();

private slots:
    void on_pushButton_clicked();

private:
    Ui::LogWindow *ui;
};

1 个答案:

答案 0 :(得分:0)

Thuga解决了这个问题:

  

在Client :: connexion中,您正在创建一个新的LogWindow实例。   如果需要,使LogWindow * w1成为Client类的成员变量   也可以在其他客户的成员函数中访问它。

     

除了_stack是一个小部件之外,没什么可抱怨的   没有父母,所以你必须确保在你没有父母时将其销毁   需要它(例如调用delete _stack;在析构函数中)。   大多数初学者都试图让ui变量公开   来自IP_text的数据,但你做的正确,通过制作   LogWindow :: getIP函数。

     

如果您不想在课堂外公开ui&gt; pushButton,那么   可以为您的LogWindow类发出信号,并连接点击的   ui> pushButton对该信号的信号。你可以连接信号   信号,它不一定是一个插槽。