QT:简单的文本从QLineEdit到QLabel的不同类
QT: simple text from QLineEdit to QLabel of different class
我想写一个非常基本的程序。主窗口包含一个标签。按"添加新"按钮打开一个QLineEdit对话框。更改文本,按"添加",我希望主窗口中的QLabel与QLineEdit的文本更新。我可以接收到信号,但是标签没有更新。我知道connect只适用于类的实例,而不是类本身。问题似乎是一个类不知道主窗口的实例。
我想做的是,一旦Add按钮被按下,就会发出一个信号。一旦这个信号被发出,mainWindow类中的槽接收到一个在QLabel::setText()中使用的字符串。
我读过无数的例子和文档,但这些例子似乎与我迷失的简单任务太不一样了。如有任何帮助,不胜感激。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtWidgets>
#include <QLabel>
class QLineEdit;
class QPushButton;
class QLabel;
class addDlg : public QDialog{
Q_OBJECT
public:
addDlg(QWidget *parent = 0);
signals:
void textChanged(const QString &text);
private slots:
void sendText(QWidget *parent);
private:
QPushButton *addButton;
QLineEdit *inputText;
};
class mainWindow : public QWidget{
Q_OBJECT
public:
mainWindow();
QLabel *textLabel;
public slots:
void recvText(const QString &text);
private slots:
void addDlgShow();
private:
QPushButton *addWindow;
addDlg *dialog;
};
#endif // MAINWINDOW_H
MainWindow.cpp
addDlg::addDlg(QWidget *parent)
: QDialog(parent){
inputText = new QLineEdit(tr("enter here"));
addButton = new QPushButton(tr("Accept"));
QVBoxLayout *vLayout = new QVBoxLayout;
vLayout->addWidget(inputText);
vLayout->addWidget(addButton);
setLayout(vLayout);
setWindowTitle(tr("Add new text"));
connect(addButton, SIGNAL(clicked()),
this, SLOT(sendText()));
}
void addDlg::sendText(){
QString text = inputText->text();
emit textChanged(text);
// This connect is where I believe the problem lies.
connect(this, SIGNAL(textChanged(QString)),
mainPtr, SLOT(recvText(QString)));
//mainPtr is uninitialized as I can't seem to point it to the manWindow instance
//I can do mainWindow* mainPtr = new mainWindow but that just creates a new instance.
//How do I pass on the first mainWindow main instance "mainPtr" to this class addDlg?
}
mainWindow::mainWindow()
: QWidget(0){
textLabel = new QLabel(tr("Empty"));
addWindow = new QPushButton(tr("Add New"));
dialog = new addDlg();
QVBoxLayout *vLayout = new QVBoxLayout;
vLayout->addWidget(textLabel);
vLayout->addWidget(addWindow);
setLayout(vLayout);
setWindowTitle(tr("Test 4"));
connect(addWindow, SIGNAL(clicked()),
this, SLOT(addDlgShow()));
}
void mainWindow::addDlgShow(){ dialog->show(); }
void mainWindow::recvText(const QString &text){
QString input = text;
textLabel->clear();
textLabel->setText(input);
textLabel->update();
}
一个解决方案是把你的连接代码放在mainWindow::mainWindow中,在那里你有指向主窗口和你新创建的对话框的指针。代码片段可能会变成这样:
mainWindow::mainWindow() : QWidget(0) {
// ... existing code ..
// add this
connect(dialog, SIGNAL(textChanged(QString)),
this, SLOT(recvText(QString)));
}
相关文章:
- 如何使用新运算符跟踪在循环中创建的 QLabel
- 如何在C++中正确引用来自不同类的类的对象?
- 除了构造函数之外,还创建 QLabel
- 是否可以创建一个从不同类调用函数的线程?
- C++不同类别的向量
- C 指针和对象作为不同类的一部分
- 有没有办法将指定不同类的 std::make_unique 传递到函数中
- 对具有相同方法的不同类使用一个变量
- 更改不同类的数组中的值
- 在 QLabel 中显示视频
- 在工人类中使用不同类的静态函数进行实验
- Qt GUI使用Qfiledialogbox和qlabel显示视频,这是我的代码
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- 不同类的向量
- 如何在C++中将自定义文本设置为 QLabel?
- 如何使用鼠标单击选择多个 QLabel 对象?
- 在特定时间内更改 QLabel 的背景颜色
- 在C++中使用具有相同类的多个模板
- 如何生成派生同类对象的类
- QT:简单的文本从QLineEdit到QLabel的不同类