В одном классе есть поле со списком, в котором пользователю нужно выбрать номер из него. Затем значение присваивается переменной, и поскольку элементы со списком являются текстами, переменная, содержащая номер (другими словами, текст), выбранный пользователем преобразуется в целочисленное значение с использованием 'toInt()' и присваивается целочисленной переменной в тот же класс. Теперь другой класс должен иметь доступ к целочисленной переменной другого класса (т. Е. Номер, выбранный пользователем), так что в зависимости от его значения пользователю отображается такое же количество виджетов. Когда я выбираю номер из поля со списком и нажимаю кнопку, ничего не происходит. Я ожидаю, что тот же номер я выбрал из поля со списком для dsiplay в качестве редактирования строки.Как получить значение переменной члена одного класса другому
Код;
combobox.h
#ifndef COMBOBOX_H
#define COMBOBOX_H
#include <QDialog>
#include <QComboBox>
#include <QPushButton>
#include <QStringList>
#include <QVBoxLayout>
class ComboBox : public QDialog {
public:
ComboBox();
~ComboBox();
private slots:
void on_go_button_clicked();
private:
QComboBox *comboBox;
public:
QPushButton *go;
int textToInt;
};
#endif // COMBOBOX_H
lineeditwidgets.h
#ifndef LINEEDITWIDGETS_H
#define LINEEDITWIDGETS_H
#include <QDialog>
#include <QLineEdit>
#include <QVBoxLayout>
#include "combobox.h"
class LineEditWidgets : public QDialog {
public:
LineEditWidgets();
LineEditWidgets(ComboBox*); //edited
~LineEditWidgets();
private:
QLineEdit *lineEdit;
//object created so member of class 'ComboBox' can be accessed
ComboBox *take;
};
#endif // LINEEDITWIDGETS_H
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QStackedWidget>
#include "lineeditwidgets.h"
#include "combobox.h"
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void go_button_clicked();
private:
QStackedWidget *pages;
ComboBox *comboBoxWindow;
LineEditWidgets *lineEditWindow;
};
#endif // MAINWINDOW_H
combobox.cpp
#include <QtGui>
#include "combobox.h"
ComboBox::ComboBox() {
comboBox = new QComboBox;
QStringList items;
items << "1" << "2" << "3" << "4" << "5";
comboBox->addItems(items);
go = new QPushButton("Go");
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(comboBox);
layout->addWidget(go);
setLayout(layout);
/*i get 'No such slot QDialog::on_go_button_clicked()' even though this
function was declared as a slot in the header file*/
connect(go, SIGNAL(clicked()), this, SLOT(on_go_button_clicked()));
}
/*the number selected from combobox is converted to integer here. I can't
seem to understand how 'toInt()' works, i thought it was like
'stringstream()' */
void ComboBox::on_go_button_clicked() {
QString text;
comboBox->currentTextChanged(text);
QString getCurrentText = comboBox->currentText();
textToInt = getCurrentText.toInt();
}
ComboBox::~ComboBox() {
}
lineeditwidgets.cpp
#include <QtGui>
#include "lineeditwidgets.h"
LineEditWidgets::LineEditWidgets(ComboBox* comboBoxWin) { //edited
/*member of 'ComboBox' class is accessed here and assigned to int
variable. I thought it's supposed to be holding the number the user
selected by now*/
/*take = new ComboBox;*/ //edited
take = comboBoxWin; //edited
int numb = take->textToInt;
QVBoxLayout *layout = new QVBoxLayout;
for (int i = 0; i < numb; i++) {
lineEdit = new QLineEdit;
layout->addWidget(lineEdit);
}
setLayout(layout);
}
LineEditWidgets::~LineEditWidgets(){
}
mainwindow.cpp
#include "mainwindow.h"
#include <ui_mainwindow.h>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){
comboBoxWindow = new ComboBox;
/*lineEditWindow = new LineEditWidgets;*/ //edited
lineEditWindow = new LineEditWidgets(comboBoxWindow); //edited
pages = new QStackedWidget;
pages->insertWidget(1, comboBoxWindow);
pages->insertWidget(2, lineEditWindow);
pages->setCurrentWidget(comboBoxWindow);
setCentralWidget(pages);
connect(comboBoxWindow->go, SIGNAL(clicked()), this,
SLOT(go_button_clicked()));
}
void MainWindow::go_button_clicked() {
pages->setCurrentWidget(lineEditWindow);
}
MainWindow::~MainWindow() {
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
«Не могу заставить его работать» не является допустимым вопросом или описанием. В чем проблема? Код не компилируется? Показать сообщение об ошибке. Вы получаете неправильные результаты? Объясните, какие результаты вы получаете, какие результаты вы ожидаете получить, и в чем разница. –
@SamVarshavchik ничего не отображается. Я обновил свой вопрос. –
Ниже 3 способа можно использовать в зависимости от спецификатора доступа. 1. Если его можно сохранить 'public', вы можете сохранить введенную пользователем переменную в глобальной переменной и использовать' extern' в других файлах для доступа к ней. Вы также можете использовать концепцию наследования для достижения этой цели. 2. Если он «защищен», вы можете получить к нему доступ через производный класс, а затем поделиться им с внешним миром, используя некоторые глобальные переменные, как упомянуто выше. 3. Если это «частные» данные, то одно и то же может быть передано другим классам, используя функции друга, и оттуда его можно присвоить глобальной переменной. –