由按钮按按钮创建的QOBject
Mainpulating a QObject created from a button press
我正在制作应用程序,在某些时候,用户将创建某种来自/调查的方式。创建时,用户将通过按下按钮和新对象选择各种问题类型等。
创建一个新部分,例如:
void CreateSurvey::question_section()
{
QLabel *sectionTitle = new QLabel();
sectionTitle->setText("New Section");
layout->addWidget(sectionTitle);
QLabel *titleLabel = new QLabel("Title");
QLineEdit *titleEdit = new QLineEdit("New Section");
QHBoxLayout *hLayout = new QHBoxLayout;
hLayout->addWidget(titleLabel);
hLayout->addWidget(titleEdit);
layout->addLayout(hLayout);
sectionCount++;
qDebug() << "sections: " << sectionCount;
}
运行应用程序时,用户将对本节标题进行编辑文本" titledit"。说这被称为3次,因此有3个部分。如何使每个部分的标题输入字符串?或如何为特定部分输入字符串?
谢谢
您可以使用QVector
之类的容器来存储QLineEdit
对象。使用此容器访问每个QLineEdit
对象的文本。
#include <QApplication>
#include <QtWidgets>
class Survey : public QWidget
{
Q_OBJECT
public:
Survey(QWidget *parent = Q_NULLPTR) : QWidget(parent)
{
resize(600, 400);
setLayout(new QVBoxLayout);
layout()->setAlignment(Qt::AlignTop);
QPushButton *button = new QPushButton("Add line edit");
connect(button, &QPushButton::clicked, this, &Survey::addLineEdit);
layout()->addWidget(button);
QPushButton *print_button = new QPushButton("Print all text");
connect(print_button, &QPushButton::clicked, this, [=]
{
for(int i = 0; i < line_edit_vector.size(); i++)
qDebug() << getText(i);
});
layout()->addWidget(print_button);
}
QString getText(int index) const
{
if(line_edit_vector.size() > index)
return line_edit_vector[index]->text();
return QString();
}
private slots:
void addLineEdit()
{
QLineEdit *edit = new QLineEdit("Line edit");
layout()->addWidget(edit);
line_edit_vector.append(edit);
}
private:
QVector<QLineEdit*> line_edit_vector;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Survey survey;
survey.show();
return a.exec();
}
#include "main.moc"
在您的CreateSurvey
标题中添加
public slot:
void title_changed();
在您的question_section
方法中,添加一个连接:
connect(titleEdit,SIGNAL(editingFinished()),this,SLOT(title_changed()));
并添加title_changed
插槽:
void CreateSurvey::title_changed()
{
QLineEdit *titleEdit=qobject_cast<QLineEdit*>(sender());
if (titleEdit) {
qDebug() << titleEdit->text();
}
}
以这种方式进行编辑时,将触发插槽title_changed
。
如果您想知道所有标题曾经仅一个已编辑,请使用此插槽:
void CreateSurvey::title_changed()
{
for (int i = 0; i < layout->count(); ++i) {
QLineEdit *titleEdit=qobject_cast<QLineEdit*>(layout->itemAt(i));
if (titleEdit) {
qDebug() << titleEdit->text();
}
}
}
相关文章:
- 问:如何使用C++中的按钮从窗口打开窗口
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- 函数计算用户按下按钮的频率
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- Qt自定义QPush按钮未显示在布局上
- SDL 操纵杆按钮按下/C++
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- Qt中来自不同功能的按钮引用
- 删除 QSharedPointer 指向的 QObject
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- ImGui 在单击按钮后冻结
- WinAPI 无法创建按钮
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- 由按钮按按钮创建的QOBject