crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику silver47 ::: Спасибо сказали: 40 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
17.11.2011, 18:22 построение таблицы
2 ArhiZhek что именно не получается? Как записать чего-то в эксель пример давал. Чтобы проверить выбран ли QCheckBox, достаточно
if(QCheckBox::isChecked)
. Начните с более простого форматирования листа, без добавления и прочего. По шагам:

1 Просмотреть выданный мною пример и попробовать вывести значения в другие части листа, меняя позицию курсора.
2 Проверяя, выбран ли чекбок, перенести значение на лист.
3 Поиграться с форматированием и формулами на листе, подумать как упростить рассчет, в конечном итоге, добитьтся необходимого внешнего вида выводимого отчета.
3а Научиться определять последнюю заполненую строку листа. И начинать заполнять с нее. В том же факе сказано не только как ЗАПИСАТЬ данные на лист, но и как ПРОЧИТАТЬ их.

В общем и целом: форум для помощи по вопросам, с которыми люди сталкиваются изучая программирование, за Вас здесь программу никто не напишет. Если Вам нужна программа, то есть ресурсы фрилансеров. Если Вы хотите научиться писать программы, то попробуйте последовательно выполнить эти 4 незамысловатых пункта. В каждом конкретном вопросе, если что не получается, обращайтесь поможем.
ArhiZhek,
14.11.2011, 5:57 вывод на печать
Самый простой пример в приложении. Не слежу за возвращаемыми значениями, но слежу за памятью. Возможны ошибки с просонья. Очень давно ничего в эксель не выводил. Файл out.xls лучше сразу кинуть в директорию Мои документы, иначе программа тихо упадет.
ArhiZhek,
11.11.2011, 4:12 вывод на печать ArhiZhek,
3.11.2011, 7:08 QTableWidget and selected Rows
Потому что, необходимо разрешить мультивыделение:
setSelectionMode(QAbstractItemView::MultiSelection);
fortero,
28.10.2011, 9:11 простейший калькулятор
А чего это у Вас, батенька, в деструкторе?

В приложении исходники проекта. Комменты ниже:
Widget::Widget(QWidget *parent) : QWidget(parent){
    QVBoxLayout *mainLay = new QVBoxLayout(this); // создаем вертикальный диспетчер компоновки

    // создаем поля ввода
    mainLay->addWidget(theFirstEdit = new QLineEdit);
    mainLay->addWidget(theSecondEdit = new QLineEdit);
    mainLay->addWidget(theThirdEdit = new QLineEdit);

    // ставим простенькую маску ввода(только цифры. Для начала сойдет, далее лучше RegExp)
    theFirstEdit->setInputMask("9999");
    theSecondEdit->setInputMask("9999");
    // запрещаем редактирование третего поля ввода
    theThirdEdit->setReadOnly(true);

    // создаем кнопку ввода
    QPushButton *clickMeBtn = new QPushButton("Calculate");
    QObject::connect(clickMeBtn, SIGNAL(clicked()), this, SLOT(calculate()));
    mainLay->addWidget(clickMeBtn);
}

Widget::~Widget(){}

void Widget::calculate(){
    // вычисляем следующим образом: берем текст с обоих полей ввода и переводим его в целое, перемножаем и переводим в строку    
    theThirdEdit->setText(QString::number(theFirstEdit->text().toInt() * theSecondEdit->text().toInt()));
}
ArhiZhek,
25.10.2011, 5:04 Получение данных на сервере?
Цитата(V7T @ 25.10.2011, 3:13) *
Получается, что все сообщение, в данном случае, разобьется на 4 блока.

Никто за Вас ничего разбивать не будет. Для проверки просто выведите значение block.size()

Цитата(V7T @ 25.10.2011, 3:13) *
Что касается прямого запихивания QImage в QDataStream,

Начните с малого. Передайте какие-нибудь числа, потом строки, потом байтовый масив произвольной длинны. Как только получиться передавать байтовый массив произвольной длины - Вы станете ближе к решению Вашей задачи.
V7T,
22.10.2011, 6:52 Получение данных на сервере?
ThreadedFortuneServer устроен таким образом, что при новом соединении создается новый поток, а в нем, в свою очеред создается новый сокет. В сокет вываливается некая фраза, затем сокет на серверной стороне завершается и поток прибивается.

Обычно же, работа клиент-серверного ПО выглядит так:
- клиент подключается к серверу
- создается новый поток
- создается сокет
- клиент отправляет запрос
- сервер принимет запрос (сигнал ReadyRead() сокета)
- сервер отвечает клиенту
- клиент принимает ответ (сигнал ReadyRead() сокета клиента)
- клиент отключается
- уничтожается сокет
- уничтожается поток (сигнал finished() и слот DeleteLater() потока)

P.S. где-то уже не так давно выкладывал я для кого-то пример.
Нашел. В примере создается сервер, который вываливает в qDebug все что получает. При дисконекте клиента, сокет и поток удаляются
V7T,
10.10.2011, 5:05 Создание проекта
Цитата(ArhiZhek @ 10.10.2011, 2:04) *
так вот, при создании проекта какой использовать шаблон?


В Вашем случае подойдет QWidget.
ArhiZhek,
7.10.2011, 18:18 QThread не прекращает работу(((
С Qt идет пример Thread Fortune Server, но его особенность такова:
входящее соединение -> создается поток, поток делает свою работу по списку последовательно и завершается
Вы внесли изменение, воткнули цикл forever в поток. Это не есть верно.
посмотрим на то, что содержит реализация потока сервера. Она состоит из конструктора класса и метода run:
// конструктор - реально не делает ничего кроме инициализации.
FortuneThread::FortuneThread(int socketDescriptor, const QString &fortune, QObject *parent)
    : QThread(parent), socketDescriptor(socketDescriptor), text(fortune){}
// метод run - создает объект сокета, шлет ответ и уничтожает все за собой.
void FortuneThread::run(){
    QTcpSocket tcpSocket;
    if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {
        emit error(tcpSocket.error());
        return;
    }

    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_0);
    out << (quint16)0;
    out << text;
    out.device()->seek(0);
    out << (quint16)(block.size() - sizeof(quint16));

    tcpSocket.write(block);
    tcpSocket.disconnectFromHost();
    tcpSocket.waitForDisconnected();
}


Что поменять?
Логично, что сокет нужно создавать в конструкторе и не на стеке а на куче т.е так:
socket = new QTcpSocket(this);

Соединить необходимые сигналы... здесь конкретно самым необходимым будет socket::readyRead(), который сообщает о том что данные в сокет просочились.
А в методе run достаточно будет лишь запустить обработчик событий:
exec();


В догонку измененный текст QThreadFortune Server. Теперь он создает сокет, и молчит, при получении данных вываливает их в дебаг. Висит до тех пор пока клиент не отключиться. Ждет подключения на любом адресе на порту пять пятерок При подключении с локалхоста так и указывайте в терминале localhost:55555
fortero, Galaxycon,
7.10.2011, 4:00 QThread не прекращает работу(((
Сокеты нужно слушать не в постоянном цикле, а запустить цикл обработчика событий... а дальше на сигналах - слотах.
Создание сокета и его запуск:
void Server::incomingConnection(int socketDescriptor){        
    // создаем отдельный поток на каждое клиентское подключение      
    ServerThread *thread = new ServerThread(socketDescriptor);
    QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));            
    thread->start();
}


сам поток:
ServerThread::ServerThread(QObject *parent) : QThread(parent), socketDescriptor(socketDescriptor){
    socket = new QSslSocket;
    //-----------------
    // Signals & Slots
    //-----------------
    QObject::connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
    QObject::connect(socket, SIGNAL(encrypted()), this, SLOT(encrypted()));
    QObject::connect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(sslErrors(QList<QSslError>)));
    QObject::connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
    QObject::connect(socket, SIGNAL(connected()), this, SLOT(connected()));
    QObject::connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError)));

    if(socket->setSocketDescriptor(socketDescriptor)){
       //qDebug() << "  sslSocket mode: " << (int)sslSocket.mode();
       //qDebug() << "  sslSocket state:" << (int)sslSocket.state();

       //qDebug() << "Calling sslSocket->startServerEncryption()";
       socket->startServerEncryption();
    }
    else {
        //qDebug() << "Couldn't setSocketDescriptor(" << socketDescriptor << ") for this connection";
        return;
    }
}
void ServerThread::run(){
    this->exec();
}

fortero,
29.9.2011, 19:12 Считать из файла в массив построчно
if(charset.toUpper() == "UTF-8")
thechicho,
26.9.2011, 18:07 Считать из файла в массив построчно
Цитата
если опция --openssl-linked, то эти библиотеки будут встроены в .exe ? (типа static сборка)

Нет. Также нужны 3 dllки. В чем разница не знаю. Делал всегда --openssl-linked
thechicho,
26.9.2011, 12:08 Считать из файла в массив построчно
#include <QFile>
#include <QStringList>
#include <QtCore/QCoreApplication>

int main(int argc, char *argv[]){
    QFile inputFile;
    QStringList myList;
    inputFile.setFileName("myinput.file");
    inputFile.open(QIODevice::ReadOnly);

    while(!inputFile.atEnd()) myList.append(inputFile.readLine());

    inputFile.close();

   // do your work here
    return 0;
}


Код из головы, могут быть ошибки незначительные :)
thechicho,
22.9.2011, 18:40 Указатели и QMessageBox
Используй второй. Объект уничтожиться, при выходе из зоны видимости. В первом нужно будет следить.
RazrFalcon,
30.8.2011, 5:25 Программа для создания тестов
Как Вы решили вопрос с безопасностью? SQLite по умолчанию ничем не защищена, и вытащить из нее все ответы - плёвое дело.
xwicked,
26.5.2011, 5:05 QColorDialog возвращает значение при закрытии
Так Вы проверьте, нажата ли кнопка ОК.
QColorDialog CD;
if(CD.exec() == QColorDialog::Accepted){
    qDebug() << "accepted";
}
ruzik,
25.5.2011, 4:08 Как проверить доступность кнопки
if(startButton->isEnabled()) // кнопка в настоящий момент активна
dsp,
17.5.2011, 11:25 Как на этапе парсинга pro-файла выполнить sh-скрипт?
Вкладка Projects. Кнопка Add Build Step. Там уже есть 2 шага: запуск qmake и make. Можно добавить свою команду в любое место. Тоже хотел автоматом номер сборки делать... но до скрипта дело еще не дошло, да и винда у меня:(
Rocky,
11.5.2011, 12:24 QTableWidget + Excel AndreyCD,
3.5.2011, 3:57 Подкорректируейте
Наверняка это самописный метод.
ruzik,
1.5.2011, 20:16 Заполнить виджет окна...
Ну чего Вы так прицепились к этому компоновщику?! Он свое дело сделал - растянул таблицу по своему размеру, а вот то что таблица не умеет изменять размеры своих столбцов под свой размер - это другое дело, нужно ее научить. Научить можно двумя способами
  1. Создать свою таблицу, унаследовавшись от сущестующей и добавив необходимый функционал
  2. Установить фильтр событий, отловить событие изменения размера таблицы и обработать его в другом методе


Как сделать первый вариант я уже писал, применительно к QTableView. Прикрепляю проект с реализацией второго варианта. В нем все та же таблица 5 на 4, в которой столбцы всегда делят размер таблицы в пропорции 10% 25% 25% 40%

UPD: Все тот же Макс Шлее страница 283
fortero,
28.4.2011, 8:03 Заполнить виджет окна...
Цитата(ernie @ 28.4.2011, 8:59) *
Можно использовать setRowHeight и setColumnWidth при изменении размера, т.е. скажем setRowHeight(tableHeight/rowCount),где tableHeight - общая высота таблицы,так же и с шириной


Блин, А кто спорит то?
Цитата(silver47 @ 28.4.2011, 7:23) *
Логичным является изменение размера ячеек в зависимости от размеров таблицы.


Вы знаете как:
Цитата(silver47 @ 28.4.2011, 7:23) *
нужно каким-то образом узнать что размеры таблицы изменились.
?

ПыСы:
Цитата(ernie @ 28.4.2011, 8:59) *
т.е. скажем setRowHeight(tableHeight/rowCount)

А если записей в таблице стотышьмилионов, что тогда увидим?
fortero,
27.4.2011, 11:17 Заполнить виджет окна...
В приведенном ниже примере установлю QTableWidget на виджет:
Widget::Widget(QWidget *parent) : QWidget(parent){
  QHBoxLayout *mainLay = new QHBoxLayout(this);
  mainLay->addWidget(table = new QTableWidget(1, 1, this));
  this->setLayout(mainLay);
}

А так для экземпляра QMainWindow:
this->setCentralWidget(table = new QTableWidget(1, 1, this));
fortero,
27.4.2011, 4:47 Почитать количество ROW в QSqlQuery
Если БД не SQLite то query.numRowsAffected();
fortero,
26.4.2011, 18:23 Вопросы с лицензией
Только читать текст лицензии BSD. Но, насколько я помню, лицензия BSD допускает использование части исходных кодов в проприетарном ПО:
"Наиболее заметные примеры таких программ — использование сетевого кода BSD в продуктах корпорации Microsoft, а также использование многих компонентов FreeBSD в операционной системе Mac OS X."
ruzik,

2 страниц V   1 2 >
RSS Текстовая версия Сейчас: 24.1.2019, 9:27