crossplatform.ru

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


  Ответ в Разворачивающиеся панели
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 20.3.2008, 22:58
  запросто, т.к. родитель - контейнер.
0xF Дата 20.3.2008, 22:00
  А хз. Не думаю :) Почитал щас доки, написано, что если кто-то из предков контрола не виден, то setVisible никакого эффекта не имеет... может по этому
Litkevich Yuriy Дата 20.3.2008, 21:29
  обычно даже и не надо делать setVisible, уже видно должно быть, он случаем задом неперет не работает? :)
0xF Дата 20.3.2008, 21:26
 
Цитата
а кнопку видно?

Нет, она не появлялась... т.е. просто пустой виджет без кнопок и групп
0xF Дата 20.3.2008, 21:25
  Так, решил проблему переопределением QWidget::showEvent: вставил туда ф-цию QFoldout::Layout
Litkevich Yuriy Дата 20.3.2008, 21:25
  а кнопку видно?
0xF Дата 20.3.2008, 21:09
  Думал, может у меня в коде какая-нить ошибка, написал:
QPushButton *button = new QPushButton( "Caption", this );

button->setVisible( true );
bool v = button->isVisible(); // ** Вот тут v = false

WTF?!! :wacko: Чо за фигня? :blink:
0xF Дата 20.3.2008, 16:57
  Так, новая запарка возникла :)
Вот код, добавляющий страницу в мой контрол:
void QFoldout::AddPage( const std::string& caption, QGroupBox *group )
{
    QPushButton *button = new QPushButton( caption.c_str(), this );

    connect( button, SIGNAL( clicked(bool) ), this, SLOT( OnCategoryButtonClicked(bool) ) );

    button->setCheckable( true );
    button->setChecked( true );
    button->setVisible( true );
    group->setVisible( true );
    group->setParent( this );

    categoryMap[ button ] = group;
    buttonMap[ caption ] = button;

    Layout();
}


И ф-ция Layout для расстановки страниц в нужном порядке:
void QFoldout::Layout( void )
{
    tCategoryMapIter end = categoryMap.end();

    int w = width();
    int yOffset = 0;

    const int k_ButtonHeight = 22;
    const int k_ButtonOffset = 0;

    for( tCategoryMapIter i = categoryMap.begin(); i != end; i++ ) {
        QPushButton *button = i->first;
        QGroupBox   *group    = i->second;

        button->setGeometry( k_ButtonOffset, yOffset, w - k_ButtonOffset * 2, k_ButtonHeight );
        group->setGeometry( 0, yOffset + k_ButtonHeight, w, group->height() );

        if( button->isVisible() ) yOffset += k_ButtonHeight; // ** Вот тут собственно запарка, isVisible возвращает false
        if( group->isVisible() ) yOffset += group->height(); // ** для QPushButton и для QGroupBox :(
    }

    resize( QSize( w, yOffset ) );
}


Прошелся дебагером по коду: сразу же после вставки страницы вызывается ф-ция Layout(см. код), но метод isVisible почему-то возвращает false, хотя я вызвал в коде вставки страницы button->setVisible( true ) и group->setVisible( true )

Почему isVisible возвращает false? О_о
0xF Дата 18.3.2008, 0:17
  .
Litkevich Yuriy Дата 17.3.2008, 23:02
  пример от Макса Шлее:
main.cpp:
CODE

#include <QtGui>
#include "CustomWidget.h"

// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QWidget wgt;

CustomWidget* pcw = new CustomWidget;
QScrollBar* phsb = new QScrollBar(Qt::Horizontal);

phsb->setRange(0, 100);

QObject::connect(phsb, SIGNAL(valueChanged(int)),
pcw, SLOT(slotSetProgress(int))
);

//Layout setup
QVBoxLayout* pvbxLayout = new QVBoxLayout;
pvbxLayout->addWidget(pcw);
pvbxLayout->addWidget(phsb);
wgt.setLayout(pvbxLayout);

wgt.show();

return app.exec();
}

CustomWidget.h:
CODE

#ifndef _CustomWidget_h_
#define _CustomWidget_h_

#include <QFrame>

// ======================================================================
class CustomWidget : public QFrame {
Q_OBJECT
protected:
int m_nProgress;

virtual void paintEvent(QPaintEvent*);

public:
CustomWidget(QWidget* pwgt = 0);

virtual QSize sizeHint() const;

signals:
void progressChanged(int);

public slots:
void slotSetProgress(int n);
};
#endif //_CustomWidget_h_

CustomWidget.cpp:
CODE

#include <QtGui>
#include "CustomWidget.h"

// ----------------------------------------------------------------------
CustomWidget::CustomWidget(QWidget* pwgt/*= 0*/) : QFrame(pwgt)
, m_nProgress(0)
{
setLineWidth(3);
setFrameStyle(Box | Sunken);

setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
}

// ----------------------------------------------------------------------
/*virtual*/ void CustomWidget::paintEvent(QPaintEvent*)
{
QPainter painter(this);
QLinearGradient gradient(0, 0, width(), height());
float f = m_nProgress / 100.0f;

gradient.setColorAt(0, Qt::black);
gradient.setColorAt(f, Qt::green);

painter.fillRect(rect(), Qt::black);
painter.setBrush(gradient);
painter.drawRect(0, 0, (int)(width() * f), height());

painter.setPen(QPen(Qt::green));
QString str = QString().setNum(m_nProgress) + "%";
painter.drawText(rect(), Qt::AlignCenter, str);

drawFrame(&painter);
}

// ----------------------------------------------------------------------
void CustomWidget::slotSetProgress(int n)
{
m_nProgress = n > 100 ? 100 : n < 0 ? 0 : n;
repaint();
emit progressChanged(m_nProgress);
}

// ----------------------------------------------------------------------
/*virtual*/ QSize CustomWidget::sizeHint() const
{
return QSize(200, 30);
}


он жестко задал размер
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 22:14