crossplatform.ru

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


  Ответ в QTableWidget
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
hmmmm Дата 30.3.2009, 22:05
  Огромное спасибо!!!!
igor_bogomolov Дата 30.3.2009, 10:27
  Эх, заставили вы меня помучиться. А решение как всегда оказалось проще некуда :rolleyes:
Нужно всего лишь добавить свойство
treeWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);

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

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 Дата 29.3.2009, 2:25
 
Цитата(Гость_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));

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

p/s показалось что вопрос подходит к теме..
canavar Дата 28.3.2009, 14:18
  Абсолютно согласен, что нужно было маны почитать, просто я уже не соображал, а сделать было нужно.

Спасибо за консультацию.
Litkevich Yuriy Дата 28.3.2009, 3:13
  canavar, по превому вопросу следовало воспользоваться поиском, и темой FAQ
igor_bogomolov Дата 28.3.2009, 0:47
  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(). Либо, как и предпологали, менять цвет в каждом итеме.
canavar Дата 28.3.2009, 0:16
  Доброго всем вечера.

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

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

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

Заранее спасибо.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 7.6.2020, 2:39