【发布时间】:2016-02-19 03:32:19
【问题描述】:
我有一个简单的QDialog,它以黑色文本显示QLabel。当我按下a 键时,我希望QLabel 的文本变为红色。我正在使用设计器制作对话框。这是我的代码:
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 用户界面编译器自动生成的。当我尝试使用以下行在myDialog.cpp 中更改label1(在ui_mydialog.h 中声明)的样式表时:
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) 成员函数并对其进行修改?
任何帮助将不胜感激。
【问题讨论】:
-
为什么需要
Ui_myDialog::部分?只需使用label1->setStyleSheet(QStringLiteral("QLabel{color: rgb(170, 0, 0);}")); -
是的,试过了,我得到一个错误,说 label1 没有在这个范围内声明。
-
哦,你使用的用户界面与我所做的不同(组合而不是继承)。在您的情况下,它应该是:
ui->label1->setStyleSheet(QStringLiteral("QLabel{color: rgb(170, 0, 0);}")); -
啊,做到了。您能否将其添加为答案,以便我将其标记为完整?谢谢!