Russian Qt Forum
Сентябрь 30, 2024, 14:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Небольшое приложение  (Прочитано 2941 раз)
ioann
Гость
« : Октябрь 05, 2010, 13:45 »

Добрый день уважаемые!

Вообщем, пишу небольшое приложение для автоматической установки Windows XP. Задумка такая: на 13 минуте, методом SVCPACK запускается приложение, в котором пользоваьтель отметит нужные ЧекБоксы.

То есть, появляется окно, в котором есть чекбоксы. Отмчая их, пользователь выбирает, какие программы следует установить.
Решил сделать так: чтобы программа была более-менее универсальной, читать из файла настроек (settings.ini) количество программ, отмечен-ли чекбокс по умолчанию, ToolTip и т. п. В качестве основного окна использую класс QWindget (QMainWindow что-то у меня не получился).

Вот пример settings.ini
Код:
[DotNet]
text = .NET 1.1
tooltip = ...
command_line = DOTNET.exe

[WinRAR]
text = WinRAR 3.80
tooltip = Архиватор
command_line = winrar.exe /S

Вот сообственно сам код:
Код:
#include <QtGui>
#include <stdio.h>
#include <stdlib.h>

class main_window : public QWidget
{
    Q_OBJECT
public:
    main_window(QWidget *parent = 0);

private:
    int all_items; // Количество программ
    QLabel *label;
    QString *text[];
    QCheckBox *checkbox[];
    bool *active[];
 };


main_window::main_window(QWidget *parent) : QWidget(parent)
{
    int t_text = 0;
    int t_active = 0;
    int t = 0;
    int all_items = 0;
    setWindowTitle(tr("Qt4!"));
    QFile settings("chooser.ini");
    QString buffer;
    QTextStream data(&settings);

    if(!settings.open(QIODevice::ReadOnly))
    {
        QMessageBox::warning(this, "ERROR","File not found");
        return;

    }

    // Подсчет количества программ

    while(!data.atEnd())
    {
        data >> buffer;
        if(buffer.left(1) == "[")
            all_items++;
    }

    QCheckBox *checkbox = new QCheckBox[all_items];
    QString *text = new QString[all_items];
    bool *active = new bool[all_items];
    data.seek(0);
    while(!data.atEnd())
    {
        data >> buffer;
        if(buffer == "text")
        {
            data >> buffer;
            buffer = data.readLine();
            text[t_text++] = buffer;
            QMessageBox::about(this, "text=", buffer);
        }

    }

    char a[256];
    sprintf(a,"all_items = %d",all_items);
    QMessageBox::about(this,"all_items",a);

    /*
         ТУТ СОЗДПНИЕ ЭТИХ QCheckBox в QVLayout
    */


    setWindowTitle("i-chooser");
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    main_window *mw = new main_window;

    mw->show();

    return app.exec();

}

#include "main.moc"


Уважаемые, помогите пожалуйста. Как добавить кнопку с таймером? То есть, кнопка с надписью "Выполнить", которая сработает автоматически, например через 30 секунд, если её не нажали.

С уважением.
Спасибо.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Октябрь 05, 2010, 21:19 »

Добавь кнопку и запусти таймер.
ЕСли кнопку нажали - останови таймер.
Если кнопку не нажали и сработал таймер вызови слот обработчик кнопки.
Записан
ioann
Гость
« Ответ #2 : Октябрь 07, 2010, 07:29 »

Добавь кнопку и запусти таймер.
ЕСли кнопку нажали - останови таймер.
Если кнопку не нажали и сработал таймер вызови слот обработчик кнопки.

Эту идею я понял... Вот только не совсем понял, как это всё реализовать.
Получается, надо в начале переопределить класс кнопки со своими слотами.

И не совсем понял, как работать с таймером.
Если Вас не затруднит, привидите пожалуйста небольшой пример с таймером.
Буду признателен.
Записан
CL0NE
Гость
« Ответ #3 : Октябрь 07, 2010, 08:39 »

Шлее: Завершение работы программы после пяти минут работы

Код
C++ (Qt)
int main(int argc, char** argv)
{
QApplication app(argc, argv);
MyProgram myProgram;
QTimer::singleShot(5 * 60 * 1000, &app, SLOT(quit()));
myProgram.show();
return app.exec();
}
 
Снова Шлее: часы,  отображающие дату и время. Отображаемая информация актуализируется в 
соответствии с установленным полусекундным интервалом запуска таймера.
Код
C++ (Qt)
#ifndef _Clock_h_
#define Clock_h_
#include <QtGui>
 
class Clock : public QLabel {
Q_OBJECT
public:
Clock(QWidget* pwgt = 0) : QLabel(pwgt)
{
QTimer* ptimer = new QTimer(this);
connect(ptimer, SIGNAL(timeout()), SLOT(slotUpdateDateTime()));
ptimer->start(500);
slotUpdateDateTime();
}
public slots:
void slotUpdateDateTime()
{
QString str = QDateTime::currentDateTime().toString(Qt::SystemLocaleDate);
setText("<H2><CENTER>" + str + "</CENTER></H2>") ;
}
};
#endif //_Clock__h_

И еще материала: http://doc.crossplatform.ru/qt/4.6.x/timers.html
« Последнее редактирование: Октябрь 08, 2010, 18:01 от CL0NE » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 22.