0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 4
1

Как в обработчике нажатия кнопки использовать локальную переменную другого метода?

27.11.2015, 03:03. Показов 998. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно чтобы в методе кнопки clicked() можно было использовать переменную db из MainWindow
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QtSql>
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QString path="C:\\Users\\akella\\Desktop\\BD\\Games.sqlite";
    QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(path);
    db.open();
    qDebug()<<db.open();
 
}
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_pushButton_clicked()
{
// не видит db
}
и как можно проделать то же самое если открытие db будет в main.cpp?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2015, 03:03
Ответы с готовыми решениями:

Как использовать переменную из другого метода?
Есть метод public static void Put() { string put = Console.ReadLine(); ...

Синтаксис, использовать переменную из другого метода
Подскажите пожалуйста как мне обьявить вот этот код //int i = 10; //for (int &gt;...

Каким образом использовать структуру метода обработчика мыши на примере нажатия левой кнопки
Здравствуйте! Разбираю примеры из книги для школьников по C# Возник ступор в следующем. задача...

Как использовать в проекте локальную переменную, измененную в цикле
Всем привет. Есть цикл foreach в нем формируется локальная переменная resalt, мне надо дальше...

8
676 / 452 / 159
Регистрация: 01.10.2015
Сообщений: 1,259
27.11.2015, 03:21 2
Объявите db в хедере MainWindow:
C++ (Qt)
1
2
#include <QtSql>
QSqlDatabase db;
а в конструкторе:
C++ (Qt)
1
2
QString path="C:\\Users\\akella\\Desktop\\BD\\Games.sqlite";
db=QSqlDatabase::addDatabase("QSQLITE");
Если будете открывать соединение в main.cpp, то информацию о соединении в MainWindow можно получить с помощью QSqlDatabase db = QSqlDatabase::database();, дальше запрашиваете isOpen(), если соединение не открыто, то подробнее об ошибке можно узнать с помощью lastError().

P.S.: и пользуйтесь тегами редактора, неудобно код читать.
1
72 / 72 / 33
Регистрация: 07.11.2015
Сообщений: 281
27.11.2015, 09:32 3
0x90h, не обязательно (я бы даже сказал вредно) делать db глобальной переменной: QSqlDatabase::database() достаточно, чтобы получить то же соединение.
QSqlDatabase is a value class. Changes made to a database connection via one instance of QSqlDatabase will affect other instances of QSqlDatabase that represent the same connection.
0
676 / 452 / 159
Регистрация: 01.10.2015
Сообщений: 1,259
27.11.2015, 10:15 4
OneMoreGres,

а вы разницу между глобальными переменными и данными-членами, видимо, не очень осознаете
0
72 / 72 / 33
Регистрация: 07.11.2015
Сообщений: 281
27.11.2015, 13:51 5

Не по теме:

0x90h, если отвечать в таком же стиле, то подключать заголовочные файлы в теле класса нельзя :p А именно это изображено в вас в примере, если не искать глубокий смысл (а человек, спрашивающий, как сделать переменную доступной для двух функций этого делать не будет).


В любом случае, копировать экземпляр соединения с БД не имеет смысла, разве только для сокращения кода при первом вызове.
0
676 / 452 / 159
Регистрация: 01.10.2015
Сообщений: 1,259
27.11.2015, 13:55 6
Цитата Сообщение от 0x90h Посмотреть сообщение
Объявите db в хедере MainWindow:
В "теле класса"? А все-таки, где вы увидели глобальную переменную? Насчет целесообразности копирования соединения это к ТС
0
72 / 72 / 33
Регистрация: 07.11.2015
Сообщений: 281
27.11.2015, 14:08 7
Цитата Сообщение от 0x90h Посмотреть сообщение
В "теле класса"?
C++ (Qt)
1
2
3
class foo {
#include <QtSql>
}
В принципе, конечно, не запрещено, но работать в подавляющем большинстве случаев не будет.

Цитата Сообщение от 0x90h Посмотреть сообщение
А все-таки, где вы увидели глобальную переменную?
Цитата Сообщение от 0x90h Посмотреть сообщение
C++ (Qt)
1
2
#include <QtSql>
QSqlDatabase db;
По указанной выше причине делаю вывод, что объявление не внутри класса. Сочетание "хедер MainWindow" в данном случае конкретное место не указывает.

З.Ы. На всякий случай продублирую:
если не искать глубокий смысл (а человек, спрашивающий, как сделать переменную доступной для двух функций этого делать не будет)
0
676 / 452 / 159
Регистрация: 01.10.2015
Сообщений: 1,259
27.11.2015, 14:19 8
Цитата Сообщение от OneMoreGres Посмотреть сообщение
объявление не внутри класса
OneMoreGres, в хедере класса подключили заголовочник QtSql и объявили db в private-разделе, никаких глобальных переменных тут в принципе нет.

Добавлено через 4 минуты
C++ (Qt)
1
2
#include <QtSql>
QSqlDatabase db;
подразумевалось, где должны находиться #include <QtSql> и QSqlDatabase db;. То, что я не расписал, с точностью до строчки, содержимое хедера, еще не основание делать выводы, подобные вашим о "глобальных" переменных и "вредности".

Не по теме:

Поисками "глубокого смысла" здесь занимаетесь как раз вы.

0
72 / 72 / 33
Регистрация: 07.11.2015
Сообщений: 281
27.11.2015, 14:20 9
То, что вы подразумевали не совпадает с тем, что вы написали (учитывая уровень вопроса). Дальше развивать не буду. Считаете, что я не прав - ок, не возражаю.
0
27.11.2015, 14:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2015, 14:20
Помогаю со студенческими работами здесь

Не получается в обработчике нажатия клавиши изменять свойства другого обекта...
Дело вот в чем: Я создаю обработчик нажатия клавиши, в нем пытаюсь изменить координаты платформы...

Неправильно работает if в обработчике нажатия кнопки
Работаю с БД, пользователь может выполнять запрос к базе по нескольким условиям, которые вводит в...

Как использовать переменную из другого в windows forms
Здравствуйте. У меня есть 2 события. В одном из них я создаю переменную, а в другом хочу её...

Как использовать событие нажатия кнопки на форме, в условии?
namespace Test { public partial class MainForm : Form { public MainForm() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru