Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QTableWidget
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
canavar
Доброго всем вечера.

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

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

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

Заранее спасибо.
igor_bogomolov
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
canavar, по превому вопросу следовало воспользоваться поиском, и темой FAQ
canavar
Абсолютно согласен, что нужно было маны почитать, просто я уже не соображал, а сделать было нужно.

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

p/s показалось что вопрос подходит к теме..
igor_bogomolov
Цитата(Гость_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
Делал похожим образом, дабы далее не растекаться мыслью по древу приведу то что я пробую сделать.. Много всего урезал для того чтобы было кратко и понятно..

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

:dance2:
hmmmm
Огромное спасибо!!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.