Я создаю небольшое приложение с QtCreator. Он компилируется, но при выполнении из QtCreator я получаю ошибку “Ошибка программы”.
Если я попытаюсь выполнить двоичный код с консоли, я получаю ошибку Segementation (core dumped).
Поскольку это первый раз, когда я запускаю Qt-код самостоятельно, я думаю, что у меня что-то не хватает. Пожалуйста, проверьте следующий код:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include class MainWindow; class QLabel; class QLineEdit; class QPushButton; class MainWindow : public QMainWindow < Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: void createGUI(); private: QLineEdit *mysqlUserLineEdit; QLineEdit *mysqlPasswordLineEdit; QLineEdit *albatrossIPLineEdit; QLineEdit *albatrossPortLineEdit; QPushButton *exitButton; QPushButton *startButton; >; #endif // MAINWINDOW_H
#include #include «mainwindow.h» #include «ui_mainwindow.h» MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) < createGUI(); //connect(. ) //connect(. ) setWindowTitle(tr(«Albatross MySQL simulator»)); >MainWindow::~MainWindow() < >void MainWindow::createGUI() < QVBoxLayout *mainLayout = new QVBoxLayout; QHBoxLayout *settingsLayout = new QHBoxLayout; QVBoxLayout *mysqlSettingsLayout = new QVBoxLayout; QHBoxLayout *mysqlUserLayout = new QHBoxLayout; mysqlUserLineEdit = new QLineEdit(); QLabel *mysqlUserLabel = new QLabel(tr(«)); mysqlUserLabel->setBuddy(mysqlUserLineEdit); mysqlUserLayout->addWidget(mysqlUserLabel); mysqlUserLayout->addWidget(mysqlUserLineEdit); QHBoxLayout *mysqlPasswordLayout = new QHBoxLayout; mysqlPasswordLineEdit = new QLineEdit(); QLabel *mysqlPasswordLabel = new QLabel(tr(«)); mysqlPasswordLabel->setBuddy(mysqlPasswordLineEdit); mysqlPasswordLayout->addWidget(mysqlPasswordLabel); mysqlPasswordLayout->addWidget(mysqlPasswordLineEdit); mysqlSettingsLayout->addLayout(mysqlUserLayout); mysqlSettingsLayout->addLayout(mysqlPasswordLayout); QVBoxLayout *networkSettingsLayout = new QVBoxLayout; QHBoxLayout *albatrossIPLayout = new QHBoxLayout; albatrossIPLineEdit = new QLineEdit(); QLabel *albatrossIPLabel = new QLabel(tr(«)); albatrossIPLabel->setBuddy(albatrossIPLineEdit); albatrossIPLayout->addWidget(albatrossIPLabel); albatrossIPLayout->addWidget(albatrossIPLineEdit); QHBoxLayout *albatrossPortLayout = new QHBoxLayout; albatrossPortLineEdit = new QLineEdit(); QLabel *albatrossPortLabel = new QLabel(tr(«P)); albatrossPortLabel->setBuddy(albatrossPortLineEdit); albatrossPortLayout->addWidget(albatrossPortLabel); albatrossPortLayout->addWidget(albatrossPortLineEdit); networkSettingsLayout->addLayout(albatrossIPLayout); networkSettingsLayout->addLayout(albatrossPortLayout); settingsLayout->addLayout(mysqlSettingsLayout); settingsLayout->addLayout(networkSettingsLayout); QHBoxLayout *buttonsLayout = new QHBoxLayout; exitButton = new QPushButton(tr(«)); buttonsLayout->addWidget(exitButton); startButton = new QPushButton(tr(«)); startButton->setDefault(true); buttonsLayout->addWidget(startButton); mainLayout->addLayout(settingsLayout); mainLayout->addLayout(buttonsLayout); centralWidget()->setLayout(mainLayout); >
И, наконец, main.cpp, который автоматически генерировался с помощью QtCreator:
Qt Crash Course for Beginners — Create C++ GUI Apps
Запуск Qt приложений .exe вне Qt Creator
#include #include «mainwindow.h» int main(int argc, char *argv[])
EDIT: Хорошо, проблема в том, что при использовании mainLayout для присоединения к mainWindow и последней строке mainwindow.cpp. То, что он бросает ошибку сегментации. Что я должен установить в качестве центрального виджета? Или есть ли другой способ привязки макета к виджету mainwindow?
Лучший ответ:
В общем, это поведение в создателе связано с SEGFAULT или отсутствующей библиотекой.
mysqlPasswordLabel->setBuddy(mysqlPasswordLineEdit); mysqlPasswordLayout->addWidget(mysqlPasswordLabel); mysqlPasswordLayout->addWidget(mysqlPasswordLineEdit);
является причиной. Вы не инициализируете mysqlPasswordLineEdit который вызывает SEGFAULT
Источник: techarks.ru
Ошибка Qt: программа неожиданно завершила работу. Процесс был принудительно завершен
Я начал новый проект с Qt5 и попробовал Qt Quick Project (QML) в Windows 10 (64 бит). Потому что я хочу использовать различные анимации и эффекты. Но я ударился о кирпичную стену, что я не могу запускать и отлаживать проекты QML. Во-первых, я хочу использовать смахивание, поэтому я пробую пример смахивания, но проект выдает ошибку.
Ошибка запуска — это первое изображение, а ошибка отладки — это второе изображение.
p.s — Я пробовал кое-что, чтобы исправить ошибки, которые связаны с обновлением драйвера NVIDIA, попыткой выпуска режима и созданием нового Qt Quick Application Project — Swipe. Но все бесполезно. Помоги мне, пожалуйста.
Комментарии (3)
Решение сбоев Qt всегда одно и то же: загрузите исходные коды Qt, соберите Qt в режиме отладки, соберите свой проект (или пример проекта) с помощью только что построенного Qt и запустите его под отладчиком. Отладчик укажет, где именно внутри Qt произошел сбой кода, и позволит нам выяснить, как исправить или обойти проблему. Прежде чем вы это сделаете, на этот вопрос практически нет ответа.
Kuba hasn’t forgotten Monica
О, спасибо большое, Куба Обер! Я сначала попробую.
Источник: reddeveloper.ru
Элементарная программа неожиданно завершилась
Возникла необходимость изучить Qt. Скачал с официального сайта онлайн инсталлятор и выполнил установку Qt Creator 4.1.0. В системе стоит VS2015 (в которой установлен модуль для С++ и он рабочий). Запустил Qt Creator, создал Desktop приложение. Удалил файлы mainWindow.
Оставил только файл main.cpp.
#include #include int main(int argc, char **argv)
После сборки и запуска пишет ошибку:
Программа неожиданно завершилась.
Выбранная сборка:
Настройки запуска сборки:
Компилятор используется MSVC2015_64bit
QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = prj1 TEMPLATE = app SOURCES += main.cpp HEADERS +=
Ответы (2 шт):
- Создовая шаблонное консольное приложение, не нужно создовать приложение с окнами.
- Для успешной сборки и дальнейшей работы нужно перейти на каталог выше и удалить кактлоги release/debug.
QLabel следует попробовать поместить в QWidget и выполнить widget->show()
Источник: husl.ru