Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Makc от Февраль 03, 2006, 15:28



Название: Qt 4.1 QTableView караул...
Отправлено: Makc от Февраль 03, 2006, 15:28
Излазил все доки, проглядел все глаза, не пойму как изменить высоту строк, что бы они не были такими безумно "толстыми". Неужели не поддерживается сортировка по клику на хедере? После .NET это кажется слегка диковатым. Помогите, кто может...


Название: Qt 4.1 QTableView караул...
Отправлено: crocus от Февраль 03, 2006, 17:56
Цитировать

не пойму как изменить высоту строк, что бы они не были такими безумно "толстыми"

1.void QTableView::resizeColumnsToContents ()  [slot]
Resizes all columns based on the size hints of the delegate used to render each item in the columns.
void QTableView::resizeRowToContents ( int row )  [slot]
2.Нет


Название: Qt 4.1 QTableView караул...
Отправлено: Makc от Февраль 03, 2006, 20:19
Цитата: "crocus"
Цитировать

не пойму как изменить высоту строк, что бы они не были такими безумно "толстыми"

1.void QTableView::resizeColumnsToContents ()  [slot]
Resizes all columns based on the size hints of the delegate used to render each item in the columns.
void QTableView::resizeRowToContents ( int row )  [slot]
2.Нет


Я обратил внимание на  функцию QTableView::resizeRowToContents ( int row ), и даже в цикле пргнал по всем строкам, но подумал, что это скорее всего изврат, ведь должно же быть что-то логичнее и прще. Но все равно спасибо за ответ.

добавлено спустя 6 минут:

 Так что же делать, если хочется отобразить данные ПОЧЕЛОВЕЧЕСКИ.
Или в QT это невозможно? Использовать сторонние ActivX?  Я уже молчу про всякие там master-detail и прочие новороты, но хотя бы сортировку по возрастанию-убыванию значения столбца ведь можно было предусмотреть, БЛИН :(


Название: Qt 4.1 QTableView караул...
Отправлено: Steven_Orko от Февраль 04, 2006, 00:52
А ты обработай клик на заголовке столбца и вызови для него функцию сортировки


Название: Qt 4.1 QTableView караул...
Отправлено: crocus от Февраль 05, 2006, 04:58
1.void QTableView::resizeColumnsToContents () [slot]
void QTableView::resizeRowsToContents () [slot]


Название: Qt 4.1 QTableView караул...
Отправлено: Makc от Февраль 06, 2006, 09:03
Цитата: "crocus"
1.void QTableView::resizeColumnsToContents () [slot]
void QTableView::resizeRowsToContents () [slot]


function resizeRowToContents does not take 0 arguments :)


Название: Qt 4.1 QTableView караул...
Отправлено: crocus от Февраль 06, 2006, 09:27
Qt4.1.0
1.void QTableView::resizeColumnsToContents () [slot]
void QTableView::resizeRowsToContents () [slot]
Код:
void MainWindow::setFontSize(int size)
{

    fontSize = size;
    QFont serifFont("MS Shell Dlg", fontSize);
    this->setFont(serifFont);
    tableView->resizeColumnsToContents();
    tableView->resizeRowsToContents();

}


Название: Re: Qt 4.1 QTableView караул...
Отправлено: nEoN от Февраль 06, 2006, 09:57
Цитата: "Makc"
Излазил все доки, проглядел все глаза, не пойму как изменить высоту строк, что бы они не были такими безумно "толстыми". Неужели не поддерживается сортировка по клику на хедере? После .NET это кажется слегка диковатым. Помогите, кто может...

По поводу высоты строк - в Qt 4.1.0 появилось полезная функция setDefaultSectionSize(...), задаёт начальный размер секций (v|h)header'a.
Код:

// Например :
tableView->verticalHeader()->setDefaultSectionSize(24);


Название: Qt 4.1 QTableView караул...
Отправлено: oktogen от Февраль 11, 2006, 22:15
Цитировать

А ты обработай клик на заголовке столбца и вызови для него функцию сортировки

а МОЖНО ПОПОДРОБНЕЕ как ловить клик по хедеру?
QT4.0, QTableView.


Название: Qt 4.1 QTableView караул...
Отправлено: Denis от Февраль 14, 2006, 22:46
В окне реализуешь слот sectionClicked(int)
и коннектишь заголовок таблицы

connect( tableView->horizontalHeader(), SIGNAL(sectionClicked (int)), this, SLOT(sectionClicked(int)));


Название: Qt 4.1 QTableView караул...
Отправлено: Steven_Orko от Февраль 15, 2006, 01:53
Цитата: "Denis"
В окне реализуешь слот sectionClicked(int)
и коннектишь заголовок таблицы

connect( tableView->horizontalHeader(), SIGNAL(sectionClicked (int)), this, SLOT(sectionClicked(int)));

Только с приведением типа. В соседней ветке тоже самое.
Код:
connect((QObject*) tableView->horizontalHeader(), SIGNAL(sectionClicked (int)), this, SLOT(sectionClicked(int)));


Название: Qt 4.1 QTableView караул...
Отправлено: Denis от Февраль 15, 2006, 14:15
Приведение совершенно не нужно - QHeaderView является потомком QObject.

В соседней ветке про необходимость каста написана какая-то ерунда - там очевидно были проблемы неполной перекомпиляции.


Название: Qt 4.1 QTableView караул...
Отправлено: oktogen от Февраль 15, 2006, 15:54
Denis
Нужно оказывается.
Если не привести, вываливается ошибка коннекта.
Может, дело в том,  что у меня 4.0 а не 4.1?


Название: Qt 4.1 QTableView караул...
Отправлено: Steven_Orko от Февраль 15, 2006, 17:13
Цитата: "oktogen"
Denis
Нужно оказывается.
Если не привести, вываливается ошибка коннекта.
Может, дело в том,  что у меня 4.0 а не 4.1?

 Я точно скажу, что это нужно и в 4.1. Хотя сам удивлен, почему? Ведь это потомок QObject...


Название: Qt 4.1 QTableView караул...
Отправлено: Denis от Февраль 15, 2006, 17:52
В 4.1/Win32/MSVC однозначно не нужно - никакой ошибки нет и оно работает. Я проверил прежде чем писать.

В 4.0/Win32/MSVC тоже.

добавлено спустя:

 В 4.1(opensource)/Linux/Gcc тоже все работает без кастов.

добавлено спустя 3 минуты:

 QT/examples/itemviews/chart:

mainwindow.cpp
-------------------

(line 71):    connect(table->horizontalHeader(), SIGNAL(sectionClicked(int)),   this, SLOT(sectionClicked(int)));

(appended to file)

void MainWindow::sectionClicked(int idx)
{
        statusBar()->showMessage(tr("Clicked column %1").arg(idx), 2000);    
}

--------------------------------------------

mainwindow.h

(line 41)    void sectionClicked(int);

--------------------------------------------


Название: Qt 4.1 QTableView караул...
Отправлено: oktogen от Февраль 15, 2006, 17:53
Denis, вся фишка в том, что я пишу вручную.
безо всяких там  MSVC-интеграторов.
пользуюсь компилятором nmake и блокнотиком.
может дело в этом, хотя сомневаюсь. Пользуюсь методом
Steven_Orko , если приведение типов работает  везде, то лучше использовать его. Для совместимости.


Название: Qt 4.1 QTableView караул...
Отправлено: Steven_Orko от Февраль 15, 2006, 17:57
Цитата: "oktogen"

Steven_Orko , если приведение типов работает  везде, то лучше использовать его. Для совместимости.

Ты прав  :)   ))))


Название: Qt 4.1 QTableView караул...
Отправлено: Denis от Февраль 15, 2006, 17:57
А кто сказал, что я пользуюсь каким-то интегратором?

> если приведение типов работает везде, то лучше использовать его. Для совместимости

Это мне напоминает фрагмент кода, найденый в каких-то старых сорцах в одной из контор:

int idx = 0;

if(idx != 0)
  idx = 0;

int* pIdx = &idx;
*pIdx = 0;


На всякий случай, я понимаю, ага....

:)


Название: Qt 4.1 QTableView караул...
Отправлено: Steven_Orko от Февраль 15, 2006, 18:01
Цитата: "Denis"
А кто сказал, что я пользуюсь каким-то интегратором?

> если приведение типов работает везде, то лучше использовать его. Для совместимости

Это мне напоминает фрагмент кода, найденый в каких-то старых сорцах в одной из контор:

int idx = 0;

if(idx != 0)
  idx = 0;

int* pIdx = &idx;
*pIdx = 0;


На всякий случай, я понимаю, ага....

:)

to Denis:
Честно говоря, не понятен сарказм...


Название: Qt 4.1 QTableView караул...
Отправлено: oktogen от Февраль 15, 2006, 18:06
Цитировать

А кто сказал, что я пользуюсь каким-то интегратором?

> если приведение типов работает везде, то лучше использовать его. Для совместимости

Это мне напоминает фрагмент кода, найденый в каких-то старых сорцах в одной из контор:

int idx = 0;

if(idx != 0)
idx = 0;

int* pIdx = &idx;
*pIdx = 0;


На всякий случай, я понимаю, ага....

IMHO , не очень в тему.


Название: Qt 4.1 QTableView караул...
Отправлено: Denis от Февраль 15, 2006, 18:08
Ребята, в данном случае, вы не найдя проблемы, почему именно у вас не работает connect (хотя должен во-первых, и у других работает во-вторых) занимаетесь тем, что натягиваете презерватив (statiс cast) на свечку.


Название: Qt 4.1 QTableView караул...
Отправлено: Dendy от Февраль 15, 2006, 18:22
Люди. Ну вьІ даёте!

Почему нужно приводить QHeaderView к QObject, если он и так является потомком обьекта? Да потому что в классе QTableView он фигурирует только как указатель, соответственно размер статических данньІх класса QHeaderView значения не имеет. Следовательно, в заголовочнике QTableView нет включения #include "qheaderview.h" - ето совершенно не нужно, если мьІ не пользуемся инлайновьІми методами для обращения к полям QHeaderView. Совершенно логично, что в заголовочнике QTableView вьІ найдёте всего лишь инструкцию: class QHeaderView;.

Поетому в своём коде, если вьІ не включили #include <QHeaderView>, компиллятор знает о нём только то, что класс с таким названием существует. Поетому варианта два:

1. если не собираетесь пользоваться функционалом QHeaderView - достаточно привести тип.

2. если пользуетесь - включайте #include <QHeaderView> в своём коде.


Название: Qt 4.1 QTableView караул...
Отправлено: Steven_Orko от Февраль 15, 2006, 18:26
Цитата: "Dendy"
Люди. Ну вьІ даёте!

Почему нужно приводить QHeaderView к QObject, если он и так является потомком обьекта? Да потому что в классе QTableView он фигурирует только как указатель, соответственно размер статических данньІх класса QHeaderView значения не имеет. Следовательно, в заголовочнике QTableView нет включения #include "qheaderview.h" - ето совершенно не нужно, если мьІ не пользуемся инлайновьІми методами для обращения к полям QHeaderView. Совершенно логично, что в заголовочнике QTableView вьІ найдёте всего лишь инструкцию: class QHeaderView;.

Поетому в своём коде, если вьІ не включили #include <QHeaderView>, компиллятор знает о нём только то, что класс с таким названием существует. Поетому варианта два:

1. если не собираетесь пользоваться функционалом QHeaderView - достаточно привести тип.

2. если пользуетесь - включайте #include <QHeaderView> в своём коде.

Именно к такому выводу и я только что пришел )))