crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QTableWidget, Ширина колонок и цвет строки
canavar
  опции профиля:
сообщение 28.3.2009, 0:16
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 26.3.2009
Пользователь №: 643

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго всем вечера.

Есть два вопросик по QTableWidget:

1. Существует три колонки. Реально ли зафиксировать боковые колонки (чтобы не менялась их ширина), а ширину средней колонки сделать плавающей (если окно растягиваем, то растягивается только средняя колонка). Реально ли это сделать?

2. Можно ли сразу поменять цвет строки или же необходимо менять цвет каждого Item'а, находящегося в строке?

Заранее спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 28.3.2009, 0:47
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


1. Конечно реально.
Цитата
void resizeSection ( int logicalIndex, int size );
void setResizeMode ( int logicalIndex, ResizeMode mode )

// задаем ширину столбцов
tableWidget->horizontalHeader()->resizeSection(0, 100);
tableWidget->horizontalHeader()->resizeSection(2, 100);
// фиксируем их размер
tableWidget->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);
tableWidget->horizontalHeader()->setResizeMode(2, QHeaderView::Fixed);
// центральный столбей делаем "растягивающимся"
tableWidget->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch);


2. Функции, чтобы поменять цвет нужной строки нет (по крайней мере я такой не знаю).
Можно сделать через делегат, переопредилив метод paint(). Либо, как и предпологали, менять цвет в каждом итеме.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.3.2009, 3:13
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


canavar, по превому вопросу следовало воспользоваться поиском, и темой FAQ
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
canavar
  опции профиля:
сообщение 28.3.2009, 14:18
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 26.3.2009
Пользователь №: 643

Спасибо сказали: 0 раз(а)




Репутация:   0  


Абсолютно согласен, что нужно было маны почитать, просто я уже не соображал, а сделать было нужно.

Спасибо за консультацию.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_hmmm_*
сообщение 29.3.2009, 0:36
Сообщение #5





Гости








    


Скажите а кто-нить сталкивался с такой проблемой... имеется QTreeWidget
Меняю у одной строки через sizeHint размер на высоту например 200. А сам widget имеет высоту 100. При этом прокрутка не появляется, при том что выбрана ScrollBarAlwaysOn или ScrollBarAsNeeded. Кто-нибудь знает как решить это??? Как сделать так чтобы прокрутка корректно отрабатывала в таких случаях??

p/s показалось что вопрос подходит к теме..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 29.3.2009, 2:25
Сообщение #6


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(Гость_hmmm_* @ 29.3.2009, 0:36) *
имеется QTreeWidget
Меняю у одной строки через sizeHint размер

Предполагаю, что это просто опечатка. Скорее всего имелось в виду
void QTreeWidgetItem::setSizeHint ( int column, const QSize & size )


Никаких проблем по идее возникнуть не должно. После изменения высоты следующим образом
    QTreeWidgetItem *item = treeWidget->topLevelItem(0);
    item->setSizeHint(0, QSize(50, 550));

автоматически появляется полоса прокрутки.
Проверяйте свой код.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_hmmmm_*
сообщение 30.3.2009, 0:57
Сообщение #7





Гости








    


Делал похожим образом, дабы далее не растекаться мыслью по древу приведу то что я пробую сделать.. Много всего урезал для того чтобы было кратко и понятно..

tree_widget_experiment.cpp:

#include "tree_widget_experiment.h"
#include <QTreeWidgetItem>
#include <QtGui>

tree_widget_experiment::tree_widget_experiment(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    QWidget *centralWidget;
    QHBoxLayout *horizontalLayout;
    QTreeWidget *treeWidget;
        
    QFrame *frame;
    QGridLayout *gridLayout;
    QLabel *label_19;
    QLabel *label_21;
    QLabel *label_20;
    QSpacerItem *horizontalSpacer;
    QLabel *label_22;
    QPlainTextEdit *plainTextEdit_4;
    
    centralWidget = new QWidget(this);
    horizontalLayout = new QHBoxLayout(centralWidget);
    treeWidget = new QTreeWidget(centralWidget);
    horizontalLayout->addWidget(treeWidget);
    
    this->resize(800, 157);
    this->setCentralWidget(centralWidget);
    
    frame = new QFrame();
    frame->setMaximumSize(QSize(16777215, 150));
    frame->setFrameShape(QFrame::NoFrame);
    frame->setFrameShadow(QFrame::Raised);
    frame->setLineWidth(0);
    
    label_19 = new QLabel(frame);
    label_21 = new QLabel(frame);
    label_20 = new QLabel(frame);
    horizontalSpacer = new QSpacerItem(198, 17, QSizePolicy::Expanding, QSizePolicy::Minimum);
    label_22 = new QLabel(frame);
    plainTextEdit_4 = new QPlainTextEdit(frame);
    
    label_19->setText("awefawef");
    label_21->setText("awefawef");
    label_20->setText("awefawef");
    label_22->setText("awefawef");

    gridLayout = new QGridLayout(frame);
    gridLayout->setSpacing(6);
    gridLayout->setMargin(11);
    gridLayout->addWidget(label_19, 0, 0, 1, 2);
    gridLayout->addWidget(label_21, 0, 2, 1, 1);
    gridLayout->addWidget(label_20, 1, 0, 1, 1);
    gridLayout->addItem(horizontalSpacer, 1, 1, 1, 1);
    gridLayout->addWidget(label_22, 1, 2, 1, 1);
    gridLayout->addWidget(plainTextEdit_4, 2, 0, 1, 3);

    QTreeWidgetItem *parentWI = new QTreeWidgetItem(treeWidget);
    parentWI->setText(0, "S/n: HWKHBKW923423");
    
    QTreeWidgetItem *childWI = new QTreeWidgetItem(parentWI);
    childWI->setSizeHint(0,QSize(50,400));
    treeWidget->setItemWidget(childWI,0,frame);
    
}

tree_widget_experiment::~tree_widget_experiment()
{

}


tree_widget_experiment.h :
#ifndef TREE_WIDGET_EXPERIMENT_H
#define TREE_WIDGET_EXPERIMENT_H

#include <QtGui/QMainWindow>

class tree_widget_experiment : public QMainWindow
{
    Q_OBJECT

public:
    tree_widget_experiment(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~tree_widget_experiment();


};

#endif // TREE_WIDGET_EXPERIMENT_H


main.cpp
#include <QtGui/QApplication>
#include "tree_widget_experiment.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    tree_widget_experiment w;
    w.show();
    return a.exec();
}


Если попытаетесь посмотреть как оно работает заметите две особенности:
1) когда раскрыли список и не меняли размер окна идёт рваная прокрутка...
2) когда не меняем размер окна и раскрываем список не вся часть ячейки видна хотя запас 400 должно хватать с головой...и прокрутка не даёт увидеть всю ячейку...

вообщем ничего не выходит((((
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 30.3.2009, 10:27
Сообщение #8


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Эх, заставили вы меня помучиться. А решение как всегда оказалось проще некуда :rolleyes:
Нужно всего лишь добавить свойство
treeWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);

:dance2:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_hmmmm_*
сообщение 30.3.2009, 22:05
Сообщение #9





Гости








    


Огромное спасибо!!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.9.2019, 20:40