0
#include "mainwindow.h"
#include <QApplication>
#include <QWidget>
#include <QString>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QString str = "Hello";
    QWidget::setWindowTitle ( "Hello" );
    MainWindow w;
    w.show();

    return a.exec();
}

Данный код не работает, почему?! беру с сайта документации. Этот кьюит вообще не понятный!!!

Twiss
  • 6,393

2 Answers2

5

Разберем все то что вы написали по строчно:

QApplication a(argc, argv); // создали экземпляр класса `QApplication`
QString str = "Hello"; // Не понятно зачем объявили строку `QString`
QWidget::setWindowTitle ( "Hello" ); // вызвали статический метод у класса `QWidget`
MainWindow w; // Только после этого объявили переменную типа `MainWindow`
w.show(); // Вызвали метод `show`
return a.exec(); // Запустили цикл обработки сообщений приложения

Q: Почему это не работает?

Данный код работает правильно, именно так как вы и написали.

Q: Почему работает неправильно?

Потому что вам необходимо вызвать метод void setWindowTitle(const QString&) у экземпляра класса MainWindow (В данном случае это переменная w).

w.setWindowTitle("Hello");

Аналогом может быть вызов статического метода QWidget::setWindowTitle(). Но только если вы это сделаете прямо в наследуемом классе MainWindow.

class MainWindow : public QWidget
{
public:
    MainWindow() : QWidget(nullptr)
    {
        // Это конструктор класса

        QWidget::setWindowTitle("Hello");
    }
// дальше могут идти методы, поля, класс показан как минимальный пример
};
  • Аналогом может быть вызов статического метода QWidget:setWindowTitle(). Но только если вы это сделаете прямо в наследуемом классе MainWindow. а как вот это сделать? – Анатолий Mar 17 '18 at 17:23
  • 2
    @Анатолий: Такое можно сделать только внутри методов которые вы объявляете/перегружаете от класса QWidget. Как пример в конструкторе. –  Mar 17 '18 at 17:24
  • Можете показать на коде, если не сложно – Анатолий Mar 17 '18 at 17:25
  • 2
    @Анатолий: Я конечно добавил пример кода, но вам стоит почитать о том что такое ООП C++. –  Mar 17 '18 at 17:29
  • буду читать. только какую литературу лучше? – Анатолий Mar 17 '18 at 17:40
  • 1
    @Анатолий: https://ru.stackoverflow.com/questions/454263/%d0%9a%d0%bd%d0%b8%d0%b3%d0%b8-%d0%b8-%d1%83%d1%87%d0%b5%d0%b1%d0%bd%d1%8b%d0%b5-%d1%80%d0%b5%d1%81%d1%83%d1%80%d1%81%d1%8b-%d0%bf%d0%be-%d0%a1 –  Mar 17 '18 at 17:41
4
#include "mainwindow.h"
#include <QApplication>
#include <QWidget>
#include <QString>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv); 
    MainWindow w;
    w.setWindowTitle ( "Hello" );
    w.show();

    return a.exec();
}

Qt не виноват, Вы не понимаете базовые принципы c++