我试图进行一个简单的测试,以使用由" Qt Design"制作的UI对象。但我对Qt和C ++很陌生。
我有一个非常简单的Ui:3 LineEdit
s和1 PushButton
:
IMAGE : 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;
};
答案 0 :(得分:0)
Thuga解决了这个问题:
在Client :: connexion中,您正在创建一个新的LogWindow实例。 如果需要,使LogWindow * w1成为Client类的成员变量 也可以在其他客户的成员函数中访问它。
除了_stack是一个小部件之外,没什么可抱怨的 没有父母,所以你必须确保在你没有父母时将其销毁 需要它(例如调用delete _stack;在析构函数中)。 大多数初学者都试图让ui变量公开 来自IP_text的数据,但你做的正确,通过制作 LogWindow :: getIP函数。
如果您不想在课堂外公开ui&gt; pushButton,那么 可以为您的LogWindow类发出信号,并连接点击的 ui> pushButton对该信号的信号。你可以连接信号 信号,它不一定是一个插槽。