我是C ++的新手,刚开始用C ++学习Qt。我发现下面的代码让我感到困惑。它只是在窗口中创建一个标签。
mainwindow.cpp是
1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
3
4 MainWindow::MainWindow(QWidget *parent) :
5 QMainWindow(parent),
6 ui(new Ui::MainWindow)
7 {
8 ui->setupUi(this);
9 }
10
11 MainWindow::~MainWindow()
12 {
13 delete ui;
14 }
15
16 void MainWindow::on_pushButton_clicked()
17 {
18 ui->label->setText("button is clicked");
19
21 }
Main.cpp是
1 #include "mainwindow.h"
2 #include <QApplication>
3
4 int main(int argc, char *argv[])
5 {
6 QApplication a(argc, argv);
7 MainWindow w;
8 w.show();
9
10 return a.exec();
11 }
Mainwindow.h是
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5
6 namespace Ui {
7 class MainWindow;
8 }
9
10 class MainWindow : public QMainWindow
11 {
12 Q_OBJECT
13
14 public:
15 explicit MainWindow(QWidget *parent = 0);
16 ~MainWindow();
17
18 private slots:
19 void on_pushButton_clicked();
20
21 private:
22 Ui::MainWindow *ui;
23 };
24
25 #endif // MAINWINDOW_H
我的困惑是ui - &gt; label-&gt; setText(“botton is clicked”)。 我理解ui是MainWindow的私有成员,它继承自Qwidget。但标签只是Qlabel的成员。为什么基类成员可以调用派生类的成员?或者有人可以解释一下为什么这是对的?
非常感谢你们
答案 0 :(得分:0)
您的班级“MainWindow”源自QMainWindow。 Ui是全球一级的命名空间;它包含一个名为MainWindow的类,这不是你的“MainWindow”。 ui是你的类Ui :: MainWindow的私有成员,它包含QLabel。
答案 1 :(得分:0)
你混淆了两件事:一个类的对象和一个类的成员。类的对象是类的实例。例如,您声明一些整数变量int n
。这里,int
是一个类,n
是类int
的对象(或实例)。 会员是您在班级中声明的私有,受保护和公开关键字。
您的MainWindow
班级有一名成员,名为ui
(在MainWindow
文件中的班级mainwindow.h
内宣布)。 ui
同时是 <{strong> Ui::MainWindow
类的对象(如果您打开ui_mainwindow.h
文件并查看Ui_MainWindow
类,那么应该了解它是如何工作的。)
所以在你的函数(插槽)中:
void MainWindow::on_pushButton_clicked()
{
ui->label->setText("button is clicked");
}
您正在调用MainWindow ui
的私有成员(这是另一个类的对象)。 ui
有一个公共成员label
,它是QLabel类的对象(或实例)。
抱歉我的英文。希望它有道理。