Изменение цвета кнопки при нажатии и уменьшение размера поля ввода QLineEdit при обрамлении в Qt Creator 4.8.1 C++

218
15 декабря 2019, 01:30

Пытаюсь написать элементарное окно авторизации (в качестве обучения) и столкнулся со следующей проблемой. Имеется определенная кнопка в cpp-файле класса:

pPB_LogIn = new QPushButton("Log in");

Для нее я установил следующие параметры:

pPB_LogIn->setStyleSheet("color: white; background-color: rgb(44,168,231)");

При нажатии на эту кнопку, она выделяется, и её цвет изменяется на мутно-зеленый и остается таким, что не устраивает. Было бы замечательно если бы её цвет как минимум оставался прежним, а ещё лучше изменялся на другой. Читал про QPalette, но ничего конкретно для случая с нажатием не нашел (либо просто балбес и читать не умею). Также видел в документации Qt https://doc.qt.io/qt-5/stylesheet-examples.html , но примеры с

QPushButton{...}

не работают (компилятор ругается). Например, если написать:

QPushButton:pressed {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                                  stop: 0 #dadbde, stop: 1 #f6f7fa);}

то компилятор выдаст ошибку:

use of undeclared identifier 'pressed'

К слову, со стилями также есть проблема и в QLineEdit. При добавлении рамки вокруг поля ввода:

pLineEdit_Login->setStyleSheet("background-color: white; border: 1px solid grey");

само поле уменьшается в размерах:

P.S Работю в Manjaro KDE Linux, Qt creator 4.8.1 Qt 5.12.1(GCC 8.2.1)

Answer 1

Создайте файл (обычно с расширением qss, но это как вам удобно).

В нем пропишите:

QPushButton:pressed {
    background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #dadbde, stop: 1 #f6f7fa);
}

Далее, этот файл необходимо загрузить и подсунуть в объект приложения:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFile file("путь/к/файлу/стилей/style.qss");
    if( !file.open(QFile::ReadOnly) )
    {
        // Что-то пошло не так            
    }
    QString styles = QLatin1String(file.readAll());
    // передаем стили в объект приложения
    a.setStyleSheet(styles);
    MainWindow w;
    w.show();
    return a.exec();
}
READ ALSO
Почему std::multiset не работает с константами?

Почему std::multiset не работает с константами?

Почему уже при создании множества, вылетает ошибка, хотя не был изменен массив?

177
Как добавить запись в JSON Qt C++

Как добавить запись в JSON Qt C++

Есть Json такой структуры:

196
error C2011: 'Game': 'struct' type redefinition

error C2011: 'Game': 'struct' type redefinition

У вас в gameh есть структура

182