Подскажите по Qt

Модератор: Fastman

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Подскажите по Qt

Непрочитанное сообщение Electronik » 2011-05-25 0:26:26

Привет.
Решил написать программку на Qt.
Но вот за чтением доков и книг по Qt, некоторые вещи не понимаю.
Например чтение/запись настроек:
Запись:

Код: Выделить всё

void sqlconnectionDialog::writeSettings()
{
    QSettings settings("elpos.conf",QSettings::NativeFormat);
    settings.beginGroup("Connection");
    settings.setValue("Connection/diverName",driverName());
    settings.setValue("Connection/hostname",hostname());
    settings.setValue("Connection/databaseName",databaseName());
    settings.setValue("Connection/userName",userName());
    settings.setValue("Connection/password",password());
    settings.setValue("Connection/port",portnum());
    settings.endGroup();
    settings.sync();
}
Чтение:

Код: Выделить всё

void sqlconnectionDialog::readSettings()
{
    QSettings settings("elpos.conf",QSettings::NativeFormat);
    settings.beginGroup("Connection");
    settings.value("Connection/diverName",driverName());
    settings.value("Connection/hostname",hostname());
    settings.value("Connection/databaseName",databaseName());
    settings.value("Connection/userName",userName());
    settings.value("Connection/password",password());
    settings.value("Connection/port",portnum());
    settings.endGroup();
}
Тут загрузка *не совсем понимаю как правильно назвать классов или функций* при вызове диалога:

Код: Выделить всё

sqlconnectionDialog::sqlconnectionDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::sqlconnectionDialog)
{
    ui->setupUi(this);
    readSettings();
    okSettings();
    applySettings();
    cancelSettings();

}
Вот остальной код:

Код: Выделить всё

QString sqlconnectionDialog::driverName()
{
    QString driver;

    if(ui->comboBox->currentText() == "PostgreSQL")
    {
        driver = "QPSQL";
    } else if(ui->comboBox->currentText() == "MySQL")
    {
        driver = "QMYSQL";
    } else if (ui->comboBox->currentText() == "SQLite")
    {
        driver = "QSQLITE";
    } else {
        QMessageBox msgErr;
        msgErr.setText("Error select SQL-driver!");
    }
    return driver;
}

QString sqlconnectionDialog::hostname()
{
    return ui->lineEdit->text();
}

QString sqlconnectionDialog::databaseName()
{
    return ui->lineEdit_2->text();
}

QString sqlconnectionDialog::userName()
{
    return ui->lineEdit_3->text();
}

QString sqlconnectionDialog::password()
{
    return ui->lineEdit_4->text();
}

QString sqlconnectionDialog::portnum()
{
    return ui->lineEdit_5->text();
}

void sqlconnectionDialog::on_okButton_click()
{
    if(ui->lineEdit->text().isEmpty())
    {
        QMessageBox::information(this,tr("No input hostname"), tr("Please input hostname"));
    } else if(ui->lineEdit_2->text().isEmpty())
    {
        QMessageBox::information(this,tr("No database selected"), tr("Please selected database"));
    } else if(ui->lineEdit_3->text().isEmpty())
    {
        QMessageBox::information(this,tr("No input username"), tr("Please input username"));
    } else if(ui->lineEdit_4->text().isEmpty())
    {
        QMessageBox::information(this,tr("No input paswword"), tr("Please input password"));
    } else if(ui->lineEdit_5->text().isEmpty())
    {
        QMessageBox::information(this,tr("No input port"), tr("Please input port"));
    } else{
        writeSettings();
        accept();
    }
}

void sqlconnectionDialog::on_cancelButtom_click()
{
    close();
}

void sqlconnectionDialog::on_applyButton_click()
{
    writeSettings();
}

void sqlconnectionDialog::okSettings()
{
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_okButton_click()));
}

void sqlconnectionDialog::applySettings()
{
    connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(on_applyButton_click()));
}

void sqlconnectionDialog::cancelSettings()
{
    connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(on_cancelButtom_click()));
}
Настройки сохраняются при нажатии на кнопку apply и на кнопку Ok.
Проблема в том что при закрытии диалога, и повторном открытии в форму не подставляются настройки.

P.S.:Это моя первая программа, документацию на Qt4 читаю, книги параллельно тоже. Прошу сильно не пинать.
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Гость
проходил мимо

Re: Подскажите по Qt

Непрочитанное сообщение Гость » 2011-05-25 0:53:14

не в коем случае не надо учить QT если вы не на ТЫ с С++

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: Подскажите по Qt

Непрочитанное сообщение Electronik » 2011-05-25 1:33:21

почему?
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

Гость
проходил мимо

Re: Подскажите по Qt

Непрочитанное сообщение Гость » 2011-05-25 1:49:13

потому что это тоже самое что заниматся починкой к примеру телевизора зная как он работает
но не зная основ електроники
можно к примеру при выключеном телевизоре, полезть рукой в некоторое место и ебонет вас прилично (CRT имееться ввиду а не LCD)

с QT получше, можно и руками и ногами и даже языком куда угодно залезть, только как результат телевизор так и не заработает

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Подскажите по Qt

Непрочитанное сообщение hizel » 2011-05-25 8:46:19

вы прочитали данные в settings и все оО
их же надо я так понимаю еще в ui впендюрить
Qt можно пользовать и без знаний С++
не слушайте гостя, он про какой-то QuickTime вещает :]
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Подскажите по Qt

Непрочитанное сообщение Fastman » 2011-05-26 10:49:34

И не будут.
Делаем скидку на то что начинающий, но действительно наивный код, я бы переписал его чуть больше чем на 100% :)
А не подставляются по одной простой причине, смотри что происходит:

открываем документацию и видим:

Код: Выделить всё

QVariant QSettings::value ( const QString & key, const QVariant & defaultValue = QVariant() ) const
Это значит value возвращает нам прочитанное значение как результат ф-ции.
Это значит правильным будет запись к примеру:

Код: Выделить всё

m_someString = settings.value("Connection/diverName",driverName()).toString();
и прочитанное значение m_someString уже пихать в твои текст боксы.
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: Подскажите по Qt

Непрочитанное сообщение Electronik » 2011-05-26 12:39:26

открываем документацию и видим
это я нашел и ошибки исправил.

сделал так

Код: Выделить всё

void sqlconnectionDialog::readSettings()
{
    QSettings settings("elpos.conf", QSettings::NativeFormat);
    settings.beginGroup("Connection");
    settings.value("diverName",driverName()).toString();
    settings.value("hostname",hostname()).toString();
    settings.value("databaseName",databaseName()).toString();
    settings.value("userName",userName()).toString();
    settings.value("password",password()).toString();
    settings.value("port",portnum()).toString();
    settings.endGroup();
    ui->lineEdit->setText(settings.value("hostname",hostname()).toString());
    ui->lineEdit_2->setText( settings.value("databaseName",databaseName()).toString());
    ui->lineEdit_3->setText(settings.value("userName",userName()).toString());
    ui->lineEdit_4->setText(settings.value("password",password()).toString());
    ui->lineEdit_5->setText(settings.value("port",portnum()).toString());
}
Но параметры всё равно не подставляются.
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

Гость
проходил мимо

Re: Подскажите по Qt

Непрочитанное сообщение Гость » 2011-05-26 12:52:13

так и не подставятся
потому что нужно учить основы С++, как сказал выше анонимус ;)

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Подскажите по Qt

Непрочитанное сообщение Fastman » 2011-05-26 12:52:31

Electronik писал(а):
открываем документацию и видим
это я нашел и ошибки исправил.
Но параметры всё равно не подставляются.
Дебагом прошелся ? Читает из файла параметры ?
Ты уверен что твой файл оно вообще находит ?

Но в любом случае - организация кода неверная. В смысле, он не читаем и непонятен на глаз.
Логика и GUI смешаны в кучу.
Ты так будешь ловить ошибки и не понимать откуда "растут ноги".

P.S.
По твоему новому коду:
а Connection куда пропал ? :)
Должно быть я так понимаю:

Код: Выделить всё

ui->lineEdit->setText(settings.value("Connection/hostname",hostname()).toString());
Главное в жизни здоровье и любовь, остальное я все куплю.

Гость
проходил мимо

Re: Подскажите по Qt

Непрочитанное сообщение Гость » 2011-05-26 12:59:51

??? = settings.value(....
кумекайте дальше сами


Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: Подскажите по Qt

Непрочитанное сообщение Electronik » 2011-05-26 13:12:52

2 Fastman
А можешь подсказать как правильно или где прочитать как правильно.
файл находит, параметры записывает и читает.
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Подскажите по Qt

Непрочитанное сообщение hizel » 2011-05-26 13:15:58

Код: Выделить всё

void sqlconnectionDialog::readSettings()
{
    QSettings settings("elpos.conf", QSettings::NativeFormat);
    settings.beginGroup("Connection");
    ui->lineEdit->setText(settings.value("hostname",hostname()).toString());
    ui->lineEdit_2->setText( settings.value("databaseName",databaseName()).toString());
    ui->lineEdit_3->setText(settings.value("userName",userName()).toString());
    ui->lineEdit_4->setText(settings.value("password",password()).toString());
    ui->lineEdit_5->setText(settings.value("port",portnum()).toString());
    settings.endGroup();
}
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Подскажите по Qt

Непрочитанное сообщение hizel » 2011-05-26 13:16:42

ой, я же не Fastman, не читайте мой коммент!!1
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: Подскажите по Qt

Непрочитанное сообщение Electronik » 2011-05-26 13:26:33

Разобрался, вот так всё заработало.

Код: Выделить всё

{
    QSettings settings("elpos.conf", QSettings::NativeFormat);
    settings.beginGroup("Connection");
    QString driverName = settings.value("diverName").toString();
    QString hostname = settings.value("hostname").toString();
    QString databaseName = settings.value("databaseName").toString();
    QString userName = settings.value("userName").toString();
    QString password = settings.value("password").toString();
    QString portnum = settings.value("port").toString();
    settings.endGroup();
    ui->lineEdit->setText(hostname);
    ui->lineEdit_2->setText(databaseName);
    ui->lineEdit_3->setText(userName);
    ui->lineEdit_4->setText(password);
    ui->lineEdit_5->setText(portnum);
}
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Подскажите по Qt

Непрочитанное сообщение hizel » 2011-05-26 13:29:54

если не будет данных в конфигурации, то не подставятся значения по умолчанию :-|
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: Подскажите по Qt

Непрочитанное сообщение Electronik » 2011-05-26 13:35:55

А какие тут могут быть дефолтные значения? максимум номер порта к драйверу БД и localhost.
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Подскажите по Qt

Непрочитанное сообщение Fastman » 2011-05-26 14:59:54

hizel писал(а):

Код: Выделить всё

void sqlconnectionDialog::readSettings()
{
    QSettings settings("elpos.conf", QSettings::NativeFormat);
    settings.beginGroup("Connection");
    ui->lineEdit->setText(settings.value("hostname",hostname()).toString());
    ui->lineEdit_2->setText( settings.value("databaseName",databaseName()).toString());
    ui->lineEdit_3->setText(settings.value("userName",userName()).toString());
    ui->lineEdit_4->setText(settings.value("password",password()).toString());
    ui->lineEdit_5->setText(settings.value("port",portnum()).toString());
    settings.endGroup();
}
Хиз, 2 балла. Придешь на пересдачу :)
Потому что нехорошо логику мешать и гуи :)
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Подскажите по Qt

Непрочитанное сообщение hizel » 2011-05-26 15:01:15

я перлист со стажем, мине можно ^_^
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: Подскажите по Qt

Непрочитанное сообщение Electronik » 2011-05-26 23:27:50

Можете подсказать с чего начать? Кроме чтения доков по QT, это я уже и так читаю :-)
Я понимаю что нужно выучить сначала С/С++, но это займёт много времени, как совместить приятное с полезным?

P.S.: Выбрал QT потому что он хорошо документирован и многое понятно.
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

Bayerische
капитан
Сообщения: 1820
Зарегистрирован: 2010-12-25 20:41:50
Откуда: Хлебная столица

Re: Подскажите по Qt

Непрочитанное сообщение Bayerische » 2011-05-26 23:47:43

Дейтелы за 21 день обещали...
У меня 3 подхода было за 2 года, так и не выучил :)

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Подскажите по Qt

Непрочитанное сообщение Fastman » 2011-05-26 23:48:37

Electronik писал(а):Можете подсказать с чего начать? Кроме чтения доков по QT, это я уже и так читаю :-)
Я понимаю что нужно выучить сначала С/С++, но это займёт много времени, как совместить приятное с полезным?
P.S.: Выбрал QT потому что он хорошо документирован и многое понятно.
Как бы тебе не хотелось, без C++ не получиться никак. Потому что Qt по умолчанию
подразумевает знание С++.
Читать по Qt:
- для начала Бланшета/Шлее.
- исходники примеров которые идут с Qt, совмещать с написанием своих велосипедов.

К сожалению, этого недостаточно. Чтобы более или менее ориентироваться в разработке
и писать вменяемый и рабочий код нужно:
- читать и интересоваться общей культурой и миром CS
- структуры данных и общие алгоритмы
- знать читать и работать с инструментами (от умения пользования дебагером до умения пользоваться системами управления версиями итд/итп).
- желательно знать основы матана... Хотя бы основы. Это избавит от множества глупых ошибок на некотором этапе...

И не зацикливаться. Если ты будешь писать под Qt+Unix, для нормального мировосприятия нужно знать а что делается
на темной стороне :) Чтобы знать сильные и слабые стороны винды и технологий на ней.
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: Подскажите по Qt

Непрочитанное сообщение Electronik » 2011-05-29 1:14:51

2 Fastman
Спасибо!
Шлее уже недели 2 читаю, в принципе с него и начинал учить QT, параллельно читая "Qt 4: Программирование GUI на С++" Бланшет.
Читаю главу, и дописываю в свой "проект".

Кто нибудь пробовал подружить Qt Creator и code.google ?
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Подскажите по Qt

Непрочитанное сообщение Fastman » 2011-05-29 2:35:38

Electronik писал(а): ...
Кто нибудь пробовал подружить Qt Creator и code.google ?
Ты имеешь ввиду интеграцию с системой контроля версий ?
Если да - то там по умолчанию есть поддержка основных систем(http://doc.qt.nokia.com/qtcreator-2.1/c ... ntrol.html)
А вообще можно и скриптами автоматизировать :) Unix жеш !

P.S.
Я сам больше люблю меркуриал. Он простой и понятный как доска :)
Главное в жизни здоровье и любовь, остальное я все куплю.