我正在尝试进行一个简单的测试,以使用通过“ Qt Design”制作的UI对象,但对于Qt和C ++来说我还是很陌生。我有一个非常简单的Ui:3 LineEdit
s和1 PushButton
:IMAGE : the UI window
我有一个应该控制Ui的客户端类。它连接,QPushButton
并且应该从中获取内容QLineEdit
。但是QDebug
,即使更改QlineEdit
字段,即使按以下按钮,输入结果也始终相同:“ Client connected:”“:0”
而且,如果我将on_pushButton_clicked
QtDesign与made一起使用,它将显示QlineEdit
s的真实值。
为什么QString
s总是一样?我要传递初始对象的副本吗?怎么解决呢?
这是制作影片的好方法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;
};
Thuga解决了它:
在Client :: connexion中,您正在创建LogWindow的新实例。如果还希望在其他Client的成员函数中访问LogWindow * w1,则将其作为Client类的成员变量。
除了_stack是没有父项的小部件外,没有什么好抱怨的,因此必须确保在不再需要它时将其销毁(例如,在析构函数中调用delete _stack;)。大多数初学者会尝试使ui变量公开以从IP_text获取数据,但是通过使LogWindow :: getIP函数使您正确地进行了操作。
如果您不想在类之外公开ui-> pushButton,则可以为LogWindow类创建一个信号,并将ui-> pushButton的单击信号连接到该信号。您可以将信号连接到信号,它不必是插槽。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句