crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Как временно изменить цвет текста и фона в QSpinBox и QTimeEdit ?
Steklova Olga
  опции профиля:
сообщение 2.12.2011, 19:20
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Здравствуйте :)
Подскажите, пожалуйста, как временно изменить цвет текста и фона в QSpinBox и QTimeEdit ?
Можно это сделать с помощью QPalette ?

Например, чтобы в QLineEdit изменить цвет текста и фона,
задаю цвета для QPalette::Text и QPalette::Base его палитры:
QPalette pal_lineEdit(this->palette());
pal_lineEdit.setColor(QPalette::Text, Qt::red); //цвет текста
pal_lineEdit.setColor(QPalette::Base, Qt::yellow); //цвет фона
lineEdit->setPalette(pal_lineEdit);

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
novichkov
  опции профиля:
сообщение 2.12.2011, 20:32
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

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




Репутация:   1  


Ну, этот код по крайней мере работает. Можно еще стили ставить через setStyleSheet. А временно - это как? На определенный промежуток времени? Или, условно говоря, по нажатию на кнопку?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 2.12.2011, 21:04
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Цитата
А временно - это как?
А временно - это по нажатию на разные кнопки.

Попробовала сделать аналогично. Написала пример (см. код). Он работает!
#include <QtGui/QApplication>
#include <QtGui/QWidget>
#include <QtGui/QTimeEdit>
#include <QtGui/QLineEdit>
#include <QtGui/QSpinBox>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget win;

    QLineEdit *lineEdit = new QLineEdit(&win);
    lineEdit->move(10,10);
    lineEdit->setText("stroka");
    QPalette pal1 = lineEdit->palette();
    pal1.setColor(QPalette::Base, Qt::yellow);
    pal1.setColor(QPalette::Text, Qt::blue);
    lineEdit->setPalette(pal1);

    QSpinBox *spinBox = new QSpinBox(&win);
    spinBox->move(10,50);
    spinBox->setRange(0, 1000);
    spinBox->setSingleStep(10);
    spinBox->setValue(100);
    QPalette pal2 = spinBox->palette();
    pal2.setColor(QPalette::Base, Qt::yellow);
    pal2.setColor(QPalette::Text, Qt::blue);
    spinBox->setPalette(pal2);

    QTimeEdit *timeEdit = new QTimeEdit(&win);
    timeEdit->move(10,90);
    timeEdit->setTime(QTime::currentTime());
    QPalette pal3 = timeEdit->palette();
    pal3.setColor(QPalette::Base, Qt::yellow);
    pal3.setColor(QPalette::Text, Qt::blue);
    timeEdit->setPalette(pal3);

    win.show();

    pal1.setColor(QPalette::Base, Qt::green);
    pal1.setColor(QPalette::Text, Qt::black);
    lineEdit->setPalette(pal1);

    pal2.setColor(QPalette::Base, Qt::green);
    pal2.setColor(QPalette::Text, Qt::black);
    spinBox->setPalette(pal2);

    pal3.setColor(QPalette::Base, Qt::green);
    pal3.setColor(QPalette::Text, Qt::black);
    timeEdit->setPalette(pal3);

    return app.exec();
}

А у меня в программе чуть-чуть не так (см. код) и уже, к сожалению, НЕ работает.
void Dialog_filter::slot_filter_accepted()
{
    inputError = false;
    if (checkBox_filter_setpar->checkState() == Qt::Checked) {
        if (checkBox_filter_b->checkState() == Qt::Checked
            &&
            (spinBox_filter_b_min->value() >
             spinBox_filter_b_max->value())
            ) {

            QPalette pal_lineEdit(this->palette());
            //QPalette pal_lineEdit(lineEdit_filter_m->palette());
            pal_lineEdit.setColor(QPalette::Text, Qt::red);
            pal_lineEdit.setColor(QPalette::Base, Qt::yellow);
            lineEdit_filter_m->setPalette(pal_lineEdit);

            //QPalette pal_spinBox(this->palette());
            //QPalette pal_spinBox(spinBox_filter_b_min->palette());
            //pal_spinBox.setColor(QPalette::Text, Qt::red);
            //pal_spinBox.setColor(QPalette::WindowText, Qt::green);
            //pal_spinBox.setColor(QPalette::Base, Qt::yellow);
            //spinBox_filter_b_min->setPalette(pal_spinBox);
            spinBox_filter_b_min->setPalette(pal_lineEdit);

            //QPalette pal_timeEdit(this->palette());
            //pal_timeEdit.setColor(QPalette::Text, Qt::red);
            //pal_timeEdit.setColor(QPalette::WindowText, Qt::green);
            //pal_timeEdit.setColor(QPalette::Base, Qt::yellow);
            //timeEdit_filter_time_min->setPalette(pal_timeEdit);
            timeEdit_filter_time_min->setPalette(pal_lineEdit);

            inputError = true;
        }
    }
    if (inputError)
        return;
}

QLineEdit меняет цвета, а QSpinBox и QTimeEdit нет.
Прикрепленный файл  error.bmp ( 65.9 килобайт ) Кол-во скачиваний: 549
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
novichkov
  опции профиля:
сообщение 2.12.2011, 21:16
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

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




Репутация:   1  


А стилями?
ui->spinBox->setStyleSheet("QSpinBox { background: yellow; color: red }");
ui->lineEdit->setStyleSheet("QLineEdit { background: yellow; color: red }");


или конкретно экземпляры класса:
ui->spinBox->setStyleSheet("QSpinBox#spinBox1 { background: yellow; color: red }");
ui->lineEdit->setStyleSheet("QLineEdit#lineEdit { background: yellow; color: red }");
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 5.12.2011, 13:43
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Спасибо, novichkov, за поддержку.
//РАБОТАЕТ (все виджеты меняют цвета)
void Dialog_filter::slot_filter_accepted()
{
    lineEdit_filter_m->setStyleSheet("QLineEdit { background: yellow; color: red }");
    spinBox_filter_b_min->setStyleSheet("QSpinBox { background: yellow; color: red }");
    timeEdit_filter_time_min->setStyleSheet("QTimeEdit { background: yellow; color: red }");
}

//РАБОТАЕТ (все виджеты меняют цвета)
void Dialog_filter::slot_filter_accepted()
{
    inputError = false;
    this->setStyleSheet("*");
    timeEdit_filter_time_min->setObjectName("");
    timeEdit_filter_time_max->setObjectName("");
    spinBox_filter_b_min->setObjectName("");
    spinBox_filter_b_max->setObjectName("");
    
    if (checkBox_filter_date->checkState() == Qt::Checked &&
        checkBox_filter_time->checkState() == Qt::Checked
        &&
        (timeEdit_filter_time_min->time() >
         timeEdit_filter_time_max->time())
        ) {
        timeEdit_filter_time_min->setObjectName("err");
        timeEdit_filter_time_max->setObjectName("err");
        inputError = true;
    }
    if (checkBox_filter_b->checkState() == Qt::Checked
        &&
        (spinBox_filter_b_min->value() >
         spinBox_filter_b_max->value())
        ) {
        spinBox_filter_b_min->setObjectName("err");
        spinBox_filter_b_max->setObjectName("err");
        inputError = true;
    }
    
    if (inputError) {
        //для всех виджетов диалога с именем err меняем цвета
        //см. The Style Sheet Syntax
        this->setStyleSheet("*#err { background: yellow; color: red }");
        return;
    }
}

А почему у меня с QPalette-то не получилось? :rolleyes: Неясно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BlueIceScream
  опции профиля:
сообщение 6.12.2011, 0:00
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 21.11.2011
Из: Республика Дагестан
Пользователь №: 3016

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




Репутация:   3  


Вариант с QPalette тоже работает нормально. Платформа и сборка Qt интересуют + весь код. После этого можно какие-то выводы делать. А так все работает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 20.4.2024, 7:47