Russian Qt Forum

Qt => Вопросы новичков => Тема начата: taifun от Май 05, 2013, 16:07



Название: Внешний вид формы
Отправлено: taifun от Май 05, 2013, 16:07
День добрый! Столкнулся с тем, что в разных версиях библиотеки Qt (если я правильно понимаю) по-разному отображается приложение (см. вложения). Снимок2.png получен при использование qt 5. Подскажите где и что нужно настраивать, чтобы получить результат как на снимок1.png?


Название: Re: Внешний вид формы
Отправлено: Bepec от Май 05, 2013, 16:54
у вас просто разные стили, на мой взгляд.


Название: Re: Внешний вид формы
Отправлено: Hellrider от Май 05, 2013, 17:17
Если используются встроенные стили, то вроде как в Qt5 убрали их и оставили один какой то...


Название: Re: Внешний вид формы
Отправлено: taifun от Май 06, 2013, 08:07
Если используются встроенные стили, то вроде как в Qt5 убрали их и оставили один какой то...
.... какой-то убогий на мой взгляд, причем больше всего напрягает толщина линий сетки. Я не разбираюсь, но предполагаю что используются встроенные (в Qt) стили, так как в ОС ничего не меняю.


Название: Re: Внешний вид формы
Отправлено: Bepec от Май 06, 2013, 11:24
Если вы хотите сказать, что оба скриншота сделаны в одной программе с одними настройками, то вынужден вам заявить - НЕ ВЕРЮ.

Ширина линий которые рисуете вы, зависит только от вашего кода, а не от стиля приложения.


Название: Re: Внешний вид формы
Отправлено: taifun от Май 06, 2013, 14:25
Если вы хотите сказать, что оба скриншота сделаны в одной программе с одними настройками, то вынужден вам заявить - НЕ ВЕРЮ.

Ширина линий которые рисуете вы, зависит только от вашего кода, а не от стиля приложения.

Скриншоты сделаны с одной и той же программы (программный код один и тот же, ширину линии не настраивал вообще). В ОС (Fedora) была предустановленная Qt 4.8.1, потом я установил Qt 5.0.2. Оба снимка сделаны в течении минуты, код не менялся, менялась только версия библиотеки.


Название: Re: Внешний вид формы
Отправлено: Bepec от Май 06, 2013, 14:51
Значит ваш код зависим от стиля. И это написали вы ;)

PS ну не может линия длиной в 100 пикселей и шириной в два пикселя менять свою ширину. Но если при рисовке использовались стили - и не такое может быть.

PPS и вообще, выложите код. Нечего людям мозг ломать своими линиями :D


Название: Re: Внешний вид формы
Отправлено: Авварон от Май 06, 2013, 15:26
Может, там полно багов с CosmeticPen и не только. Скорее всего, тонкие линии в Qt4 - результат какого-то бага пейнтера.


Название: Re: Внешний вид формы
Отправлено: Bepec от Май 06, 2013, 16:21
Хм. А если взять за отсчёт то, что квадраты - это возможно виджеты? :P Тогда всё становится яснее.

Код. Нужно больше кода!


Название: Re: Внешний вид формы
Отправлено: taifun от Май 06, 2013, 22:55
Код:
#include "mform.h"
#include "ui_mform.h"

mform::mform(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::mform)
{
    ui->setupUi(this);
   

    createConnections();

    ui->graphView->setScene( &sceneField );
    ui->graphView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
    ui->graphView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );

    createField();
}

mform::~mform()
{
    delete ui;
}

void mform::createConnections()
{
    connect(ui->spWidth, SIGNAL(valueChanged(int)), this, SLOT(createField()));
    connect(ui->spHeight, SIGNAL(valueChanged(int)), this, SLOT(createField()));

    //connect(ui->spWidth, &QSpinBox::valueChanged, this, &mform::createField);
    //QObject::connect(ui->spHeight, &QSpinBox::valueChanged, this, mform::createField());

}

void mform::resizeEvent(QResizeEvent *event)
{
    ui->graphView->fitInView( sceneField.sceneRect(), Qt::KeepAspectRatio);
    QWidget::resizeEvent(event);
}

bool mform::event(QEvent *event)
{
    if ( event->type() == QEvent::Show )
        ui->graphView->fitInView(sceneField.sceneRect(), Qt::KeepAspectRatio);

    return QWidget::event(event);
}


void mform::createField()
{
    deleteField();


    const int sizeCell = 10;
    fieldCells.resize( ui->spHeight->value() );
    bArrCells.resize( ui->spHeight->value() );


    for (int y = 0; y < ui->spHeight->value(); y++)
    {
        fieldCells[y].resize( ui->spWidth->value() );
        bArrCells[y].resize( ui->spWidth->value() );

        for (int x = 0; x < ui->spWidth->value(); x++)
        {
            fieldCells[y][x] = sceneField.addRect(x * sizeCell, y * sizeCell, sizeCell, sizeCell);
        }
    }

    ui->graphView->fitInView( sceneField.sceneRect(), Qt::KeepAspectRatio);

}

void mform::deleteField()
{
    sceneField.clear();
    fieldCells.clear();
    bArrCells.clear();
}