Страница 1 из 1

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

Добавлено: 2011-05-25 0:26:26
Electronik
Привет.
Решил написать программку на 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 читаю, книги параллельно тоже. Прошу сильно не пинать.

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

Добавлено: 2011-05-25 0:53:14
Гость
не в коем случае не надо учить QT если вы не на ТЫ с С++

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

Добавлено: 2011-05-25 1:33:21
Electronik
почему?

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

Добавлено: 2011-05-25 1:49:13
Гость
потому что это тоже самое что заниматся починкой к примеру телевизора зная как он работает
но не зная основ електроники
можно к примеру при выключеном телевизоре, полезть рукой в некоторое место и ебонет вас прилично (CRT имееться ввиду а не LCD)

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

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

Добавлено: 2011-05-25 8:46:19
hizel
вы прочитали данные в settings и все оО
их же надо я так понимаю еще в ui впендюрить
Qt можно пользовать и без знаний С++
не слушайте гостя, он про какой-то QuickTime вещает :]

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

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

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

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

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

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

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

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

Добавлено: 2011-05-26 12:39:26
Electronik
открываем документацию и видим
это я нашел и ошибки исправил.

сделал так

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

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());
}
Но параметры всё равно не подставляются.

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

Добавлено: 2011-05-26 12:52:13
Гость
так и не подставятся
потому что нужно учить основы С++, как сказал выше анонимус ;)

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

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

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

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

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

ui->lineEdit->setText(settings.value("Connection/hostname",hostname()).toString());

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

Добавлено: 2011-05-26 12:59:51
Гость
??? = settings.value(....
кумекайте дальше сами

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

Добавлено: 2011-05-26 13:00:46
Гость
хотя в http://doc.qt.nokia.com/stable/qsettings.html
все описано
ех

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

Добавлено: 2011-05-26 13:12:52
Electronik
2 Fastman
А можешь подсказать как правильно или где прочитать как правильно.
файл находит, параметры записывает и читает.

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

Добавлено: 2011-05-26 13:15:58
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();
}

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

Добавлено: 2011-05-26 13:16:42
hizel
ой, я же не Fastman, не читайте мой коммент!!1

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

Добавлено: 2011-05-26 13:26:33
Electronik
Разобрался, вот так всё заработало.

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

{
    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);
}

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

Добавлено: 2011-05-26 13:29:54
hizel
если не будет данных в конфигурации, то не подставятся значения по умолчанию :-|

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

Добавлено: 2011-05-26 13:35:55
Electronik
А какие тут могут быть дефолтные значения? максимум номер порта к драйверу БД и localhost.

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

Добавлено: 2011-05-26 14:59:54
Fastman
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 балла. Придешь на пересдачу :)
Потому что нехорошо логику мешать и гуи :)

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

Добавлено: 2011-05-26 15:01:15
hizel
я перлист со стажем, мине можно ^_^

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

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

P.S.: Выбрал QT потому что он хорошо документирован и многое понятно.

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

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

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

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

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

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

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

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

Кто нибудь пробовал подружить Qt Creator и code.google ?

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

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

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