Изменение цвета текста QLabel? Доступ и изменение членов файла.ui? [Qt]
У меня простой QDialog
это показывает QLabel
в черном тексте. Я бы хотел за QLabel
текст, чтобы стать красным, когда я нажимаю a
ключ. Я использую дизайнер, чтобы сделать диалог. Вот мой код:
myDialog.h
#include <QDialog>
#include <QWidget>
namespace Ui {
class myDialog;
}
class myDialog : public QDialog
{
Q_OBJECT
public:
explicit myDialog(QWidget* parent = 0);
~myDialog();
private:
Ui::myDialog* ui;
protected:
void keyPressEvent(QKeyEvent* event);
};
myDialog.cpp
#include "myDialog.h"
#include "ui_myDialog.h"
#include <QKeyEvent>
myDialog::myDialog(QWidget* parent) :
QDialog(parent),
ui(new Ui::myDialog)
{
ui->setupUi(this);
}
void myDialog::eventPressEvent(QKeyEvent* event)
{
if (event->key()==Qt::Key_A){
Ui_myDialog::label1->setStyleSheet(QStringLiteral("QLabel{color: rgb(170, 0, 0);}"));
} else {
qDebug << "FAIL";
}
}
myDialog::~myDialog()
{
delete ui;
}
ui_mydialog.h
/********************************************************************************
** Form generated from reading UI file 'about.ui'
** Created by: Qt User Interface Compiler version 5.5.0
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_MYDIALOG_H
#define UI_MYDIALOG_H
...<snip>...
QT_BEGIN_NAMESPACE
class Ui_myDialog
{
public:
QLabel *label1;
void setupUi(QDialog *myDialog)
{
...<snip>...
label1 = new QLabel(myDialog);
label1->setObjectName(QStringLiteral("label1"));
label1->setGeometry(QRect(50, 333, 16, 20));
label1->setFont(font);
label1->setAlignment(Qt::AlignCenter);
...<snip>...
} // setupUi
...<snip>...
namespace Ui {
class myDialog: public Ui_myDialog {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_MYDIALOG_H
Итак, вот в чем проблема. Когда я собираю проект, файл называется ui_mydialog.h
создается и создается в папке сборки. Этот файл даже говорит, что он был автоматически сгенерирован компилятором пользовательского интерфейса Qt. Когда я пытаюсь изменить таблицу стилей label1
(который объявлен в ui_mydialog.h
) в myDialog.cpp
используя строку:
Ui_myDialog::label1->setStyleSheet(QStringLiteral("QLabel{color: rgb(170, 0, 0);}"));
... я получаю ошибку, которая говорит error: invalid use of non-static data member 'Ui_myDialog::label1'
, Вот где я застрял. Как бы я поступил правильно проходить label1
в void myDialog::eventPressEvent(QKeyEvent* event)
функция-член и ее изменение?
Любая помощь будет оценена.
2 ответа
С помощью Ui_myDialog::
на нестатическом члене неверно.
Вам нужно заменить
Ui_myDialog::label1->setStyleSheet(QStringLiteral("QLabel{color: rgb(170, 0, 0);}"));
с
ui->label1->setStyleSheet(QStringLiteral("QLabel{color: rgb(170, 0, 0);}"));
Вам не нужно new Ui::myDialog
в 'myDialog.cpp'.
1) myDialog.h
добавлять #include "ui_mydialog.h"
+ Изменить Ui::myDialog* ui;
в Ui::myDialog ui;
2) myDialog.cpp
Удалить ui(new Ui::myDialog)
в конструкторе.
И тогда вы можете использовать ui.label1->.....
,