【问题标题】:Changing color of QLabel text? Accessing and modifying members of .ui file? [Qt]更改 QLabel 文本的颜色?访问和修改 .ui 文件的成员? [Qt]
【发布时间】: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-&gt;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-&gt;setStyleSheet(QStringLiteral("QLabel{color: rgb(170, 0, 0);}"));
  • 是的,试过了,我得到一个错误,说 label1 没有在这个范围内声明。
  • 哦,你使用的用户界面与我所做的不同(组合而不是继承)。在您的情况下,它应该是:ui-&gt;label1-&gt;setStyleSheet(QStringLiteral("QLabel{color: rgb(170, 0, 0);}"));
  • 啊,做到了。您能否将其添加为答案,以便我将其标记为完整?谢谢!

标签: c++ qt


【解决方案1】:

在非静态成员上使用Ui_myDialog:: 是不正确的。

你需要更换

Ui_myDialog::label1->setStyleSheet(QStringLiteral("QLabel{color: rgb(170, 0, 0);}"));

ui->label1->setStyleSheet(QStringLiteral("QLabel{color: rgb(170, 0, 0);}"));

【讨论】:

    【解决方案2】:

    “myDialog.cpp”中不需要new Ui::myDialog

    1) myDialog.h

    添加#include "ui_mydialog.h"Ui::myDialog* ui; 更改为Ui::myDialog ui;

    2) myDialog.cpp

    在构造函数中删除ui(new Ui::myDialog)

    然后,您可以使用ui.label1-&gt;.....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 2012-07-11
      • 2013-05-21
      • 2021-04-24
      • 2017-06-13
      • 2018-06-29
      • 1970-01-01
      相关资源
      最近更新 更多