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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Как такое сделать (новое окно, чекбоксы, кнопки, сохранение данных)  (Прочитано 16879 раз)
thechicho
Гость
« : Октябрь 12, 2011, 11:29 »

подскажите, как можно добиться желаемого результата (на картинке).
1. задать разную ширину заголовкам. чего только я не пробовал...
получилось только установить одинаковую для всех длину...
а надо получить разную плавающую ширину для каждого столбца. т.е. изначально задаю размер для каждого столбца (наприм., 200, 50, 100) и после вставки контента, например, во 2ой столбик, его ширина сразу же должна подстраиваться под контент. увеличиваться, а ширина других, соответственно уменьшаться (ну или не обязательно чтобы уменьшалась - можно задать большой размер таблицы, главное чтобы полоса прокрутки не появлялась).
ща так:

Код
C++ (Qt)
model = new QStandardItemModel(0, 3, this);
 
ui->tableView->setSortingEnabled(true);
ui->tableView->sortByColumn(1, Qt::DescendingOrder);
 
//ui->tableView->horizontalHeader()->setStretchLastSection(true);
//ui->tableView->setMaximumWidth(500);
//ui->tableView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
//ui->tableView->horizontalHeader()->setResizeMode(1, QHeaderView::Interactive);
//ui->tableView->horizontalHeader()->resizeSection(1, 250);
//ui->tableView->horizontalHeader()->setMaximumSize(50, 50);
 
//model->setHeaderData(0, Qt::Horizontal, QObject::tr("№"));
model->setHeaderData(0, Qt::Horizontal, QObject::tr("Номер"));
model->setHeaderData(1, Qt::Horizontal, QObject::tr("Баланс"));
model->setHeaderData(2, Qt::Horizontal, QObject::tr("Время парсинга"));
 
//model->setHorizontalHeaderLabels(QStringList() << "Номер" << "Баланс" << "Время парсинга");
 
ui->tableView->setModel(model);

строку добавляю:
Код
C++ (Qt)
       model->insertRow(iterationCount);
       model->setData(model->index(iterationCount, 0), phone);
 
       QColor color;
       if (balanse < 10) {
           color = Qt::red;
       } else if (balanse > 10 && balanse < 50) {
           color = Qt::darkRed;
       } else if (balanse > 50 && balanse < 100) {
           color = Qt::darkBlue;
       } else {
           color = Qt::darkGreen;
       }
       model->setData(model->index(iterationCount, 1), QColor(color), Qt::ForegroundRole);
 
       model->setData(model->index(iterationCount, 1), balanse);
       model->setData(model->index(iterationCount, 2), timeElapsed);

1.1. как добавить строку с объединенными столбцами;

2. убрать подсветку и треугольничеГ;
3. ручная выборка телефонов, для которых надо получить баланс. новое окно, кнопки добавить, удалить. телефоны и чекбоксы. чекбокс "Отметить/Снять все".
после закрытия программы, чекбоксы должны оставаться на своих местах. для этого придется записывать состояние в файл?
какой тип файла лучше использовать?
ща у меня список телефонов в .txt
для этих целей лучше, наверн, создать файл ресурсов (как я понял, это файл, кот. встраивается в .exe), т.к. он много не будет весить.
или использовать базу данных?

вот как-то так.
буду благодарен любой подсказке.
« Последнее редактирование: Октябрь 12, 2011, 12:43 от thechicho » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Октябрь 12, 2011, 13:52 »

1.1 QTableView::setSpan()
2. headerView->setClickable(false)
3. использовать model-view, хотя думаю можно и схалтурить через QFormLayout; сохранять состояние можно, скажем, в БД или QSettings. БД целесообразно использовать если списки будут достаточно большими.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
thechicho
Гость
« Ответ #2 : Октябрь 12, 2011, 14:44 »

//1.1 QTableView::setSpan()
так попробовал, не получилось. все равно 3 столбца.
Код
C++ (Qt)
ui->tableView->setSpan(iterationCount, 0, 1, 3);
model->insertRow(iterationCount);
model->setData(model->index(iterationCount, 0), timeAllStr);
iterationCount - номер строки
0 - с нулевого столбца?
1 - одна строка?
3 - слить 3 столбца в один?

где ошибка?

// headerView->setClickable(false)
тогда же сортировка работать не будет? я просто хотел, чтобы сортировало без выделения и треугольника.

// 3. использовать model-view, хотя думаю можно и схалтурить через QFormLayout; сохранять состояние можно, скажем, в БД или QSettings. БД целесообразно использовать если списки будут достаточно большими.

QSettings, т.е. прямо в .exe будут как-то сохраняться. спс Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Октябрь 12, 2011, 18:03 »

//1.1 QTableView::setSpan()
так попробовал, не получилось. все равно 3 столбца.
поменяй местами первую и вторую строку
// headerView->setClickable(false)
тогда же сортировка работать не будет? я просто хотел, чтобы сортировало без выделения и треугольника.
да, не будет
QSettings, т.е. прямо в .exe будут как-то сохраняться. спс Улыбающийся
QSettings сохраняет в систему хранения настроек (например в винде это реестр). приложение, модифицирующее само себя, обычно является вирусом Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
thechicho
Гость
« Ответ #4 : Октябрь 12, 2011, 18:10 »

// поменяй местами первую и вторую строку
блин Веселый
// QSettings сохраняет в систему хранения настроек (например в винде это реестр)
спс, не знал Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Октябрь 12, 2011, 18:21 »

почитал бы про этот класс - знал бы
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
thechicho
Гость
« Ответ #6 : Октябрь 12, 2011, 18:25 »

да там этих классов, как ... в общем, знал бы что такой есть, не спрашивал бы!)
вот ты б лучше по 1 пункту подсказал Подмигивающий
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Октябрь 12, 2011, 18:36 »

смотреть документацию даже по используемым тобой классам вообще не хочешь (или это просто такая нелюбовь к поганому буржуйскому языку?). QTableView::resizeColumnToContents()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
thechicho
Гость
« Ответ #8 : Октябрь 12, 2011, 19:09 »

я ж грю, пробовал пробовал, да не вышло.
это или что-то подобное пробовал. получалось, чтобы столбец расширялся по содержимому.
но я то спросил Улыбающийся
// задать разную ширину заголовкам
на кроссплатформерском форуме находил похожую тему, там так решение и не нашли.

// поганому буржуйскому языку
Веселый неправильно там меня поняли. я ж не говорил, что он поганный и тп. я говорил, что нам "свое производство" поднимать надо, пАнимаешь Веселый

вот ща давай, скажи как задать нужную ширину для заголовков Подмигивающий
в документацию то все посылать умеют Показает язык
хотя там полюбому есть решение, ток я не нашел Строит глазки
« Последнее редактирование: Октябрь 12, 2011, 19:43 от thechicho » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #9 : Октябрь 12, 2011, 19:22 »

QTableView::resizeColumnToContents()
если это не то, тогда не знаю. не ну можно конечно еще руками высчитывать длины всех ячеек в пикселях, брать максимальную и задавать ширину столбцу.
« Последнее редактирование: Октябрь 12, 2011, 19:25 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
thechicho
Гость
« Ответ #10 : Октябрь 12, 2011, 19:46 »

лан, завтра добью.
сенкс за помощь Улыбающийся

особенно за это  Веселый
/* //1.1 QTableView::setSpan()
так попробовал, не получилось. все равно 3 столбца. */
поменяй местами первую и вторую строку
 Веселый Веселый Веселый вот бы все проблемы так решать)))
Записан
thechicho
Гость
« Ответ #11 : Октябрь 13, 2011, 14:02 »

с 1 пунктом разобрался, но плавающую ширину не стал делать, т.к. руками потом нельзя менять и QHeaderView::ResizeToContents устанавливает минимальную ширину столбцу.
т.е. чтобы 2ой столбец был заданной длины и растягивался под контент, надо:
Код
C++ (Qt)
ui->tableView->horizontalHeader()->setMinimumSectionSize(1, 100);
ui->tableView->horizontalHeader()->setResizeMode(1, QHeaderView::ResizeToContents);
и все бы хорошо, но потом руками уже нельзя изменить размер! недоработка или фича, хз, но меня не устраивает.

короче, сделал так:
Код
C++ (Qt)
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
   QTextCodec *codec = QTextCodec::codecForName("UTF-8");
   QTextCodec::setCodecForCStrings(codec);
   QTextCodec::setCodecForTr(codec);
 
   model = new QStandardItemModel(0, 3, this);
 
//    model->setHeaderData(0, Qt::Horizontal, tr("Номер"));
//    model->setHeaderData(1, Qt::Horizontal, tr("Баланс"));
//    model->setHeaderData(2, Qt::Horizontal, tr("Время парсинга"));
   model->setHorizontalHeaderLabels(QStringList() << "Номер" << "Баланс" << "Время парсинга");
 
   //ui->tableView->setContextMenuPolicy(Qt::DefaultContextMenu);
   ui->tableView->setModel(model);
 
   ui->tableView->setSortingEnabled(true);
   ui->tableView->sortByColumn(1, Qt::DescendingOrder);
 
   ui->tableView->horizontalHeader()->resizeSection(0, 200);
   ui->tableView->horizontalHeader()->resizeSection(1, 100);
   ui->tableView->horizontalHeader()->setStretchLastSection(true);
}
 
Записан
thechicho
Гость
« Ответ #12 : Октябрь 13, 2011, 14:07 »

насчет 3
я нарисовал в дизайнере форму для телефонов.
у меня уже есть основная форма, как мне дополнительную форму к ней подключить?
в смысле форму я подключу #include "ui_phones.h"
но как потом с ней работать?..
киньте ссылку плиз, где почитать можно как подлючать еще одну форму.
Записан
Bepec
Гость
« Ответ #13 : Октябрь 13, 2011, 15:27 »

http://doc.trolltech.com/main-snapshot/

Мда, наглый хам, покрывающий все, неумеющий разговаривать использует форум как средство помощи... Что из этого... этой программы получится?!
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #14 : Октябрь 13, 2011, 15:28 »

тебе б книжку по Qt почитать, да и по С++ тоже не помешало б. ну и примерчики посмотреть, которые обычно устанавливаются вместе с Qt.

форма - это ж класс. как классы-то подключать знаешь? Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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