Обновление заголовка главного окна после того, как exec получает ошибку сегмента - PullRequest
0 голосов
/ 09 октября 2019

Если я вызываю функцию MainWindow setWindowTitle после вызова a.exec () в main.cpp, я получаю ошибку сегмента (C000 0005). Есть ли способ изменить заголовок окна после запуска графического интерфейса. Я не верю, что это ограничение WIN 10, так как я мог бы сделать это на python с помощью tkinter. Я использую qtcreator, но без форм QML.

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Скорее всего, вы пытаетесь использовать уничтоженный экземпляр MainWindow. Возможно, вы по ошибке установили атрибут QT_WADeleteOnClose в окне. Следующий автономный пример демонстрирует эту проблему. Атрибут может быть установлен в файле .ui, и вы можете не знать о нем.

screenshot of the example application

// https://github.com/KubaO/stackoverflown/tree/master/questions/mainwindow-crash-double-delete-58305305
#include <QtWidgets>

class Window : public QMainWindow {
   QWidget central;
   QGridLayout layout{&central};
   QLabel label{"Hello, World!"};
   QCheckBox crash{"Crash on exit"};
public:
   static bool alive;
   Window() {
      alive = true;
      layout.addWidget(&label, 0, 0);
      layout.addWidget(&crash, 1, 0);
      setCentralWidget(&central);
      connect(&crash, &QCheckBox::toggled, this, [this](){
         setAttribute(Qt::WA_DeleteOnClose, crash.isChecked());
      });
   }
   ~Window() {
      qDebug() << __FUNCTION__;
      alive = false;
   }
};
bool Window::alive;

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   int rc;
   {
      Window w;
      w.show();
      rc = a.exec();
      Q_ASSERT(w.alive);
      w.setWindowTitle("A New Title Awaits");
      qDebug() << "We're past w.setWindowTitle()";
   }
   return rc;
}
0 голосов
/ 09 октября 2019

Моя проблема была вызвана попыткой использовать указатель на мое главное окно без функции MainWindow. На самом деле это было немного более запутанным, так как я на самом деле вызывал функцию в другом классе. Решением было передать указатель this функции в другом классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...