Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компилируется, но не запускается
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
xu-user
Доброго времени суток.
Делал пример по книжке Бланшет-Саммерфильд, компилируется нормально, но при запуске выдаёт "прекращение работы программы" Что не так, понять не могу.
Вот исходники:

хедер окна диалога:
#ifndef SORTDIALOG_H
#define SORTDIALOG_H

#include <QDialog>
#include "ui_sortdialog.h"

class SortDialog:public QDialog, public Ui::SortDialog
{
    Q_OBJECT;

    public:
        SortDialog(QWidget* parent = 0);
};

#endif // SORTDIALOG_H


Его реализация:
#include <QtGui>
#include "sortdialog.h"

SortDialog::SortDialog(QWidget *parent)
    :QDialog(parent)
{
    secondaryGroupeBox->hide();
    tertiaryGroupeBox->hide();

    layout()->setSizeConstraint(QLayout::SetFixedSize);

}


Маин:
#include <QtGui/QApplication>
#include "sortdialog.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    SortDialog *dialog = new SortDialog;
    dialog->show();
    return app.exec();
}


В чем я ошибся ?
silver47
откуда берутся указатели secondaryGroupeBox, tertiaryGroupeBox, layout() и на что они, по вашему, указывают?
xu-user
class SortDialog:public QDialog, public Ui::SortDialog
Вот отсюда думал, если наследовать "Ui::SortDialog" то можно обращаться к элементам формы сразу по имени. Qt мне сразу дописывал их названия, вот и решил что видит значит.
не так ?
silver47
У Вас есть форма этого диалога, на котором Вы разместили в дизайнере эти элементы?

В общем так:
если использовался дизайнер для создания формы (имеет место быть файл sortdialog.ui в директории с проектом), то:
sortdialog.h дополниться:
namespace Ui {
    class SortDialog;
}
// разрыв
private:
    Ui::SortDialog *ui;

конструктор sortdialog.cpp будет такой:
SortDialog::SortDialog(QWidget *parent) :  QWidget(parent),  ui(new Ui::SortDialog)
{
    ui->setupUi(this);

    // теперь Ваш текс:
    ui->secondaryGroupeBox->hide();
    ui->tertiaryGroupeBox->hide();
}


Если дизайнер НЕ использовался, то сначала Вам необходимо создать объекты, на которые Вы указателями будите ссылаться, иначе указатель указывает на произвольную область памяти. Когда Вы пытаетесь с ней что-либо делать, то ОС закрывает Ваше приложение.

Вот архив с исходником проекта из этой книги. У Вас, видимо, отсутствует файл ui:
xu-user
Да, использовался дизайнер. Сделал как написано, жалуется на строчку "ui->setupUi(this);"
..\ExtendedDialog_!\sortdialog.cpp: In constructor 'SortDialog::SortDialog(QWidget*)':

..\ExtendedDialog_!\sortdialog.cpp:8: error: no matching function for call to 'Ui::SortDialog::setupUi(SortDialog* const)'

./ui_sortdialog.h:69: note: candidates are: void Ui_SortDialog::setupUi(QMainWindow*)


типы не совпадают, хотя в примерах видел точно такую же картину и всё работает. :mellow:
silver47
Запустите то, что я прислал. Пришлите сюда свой вариант, который не работает, поглядим.
xu-user
То что вы прислали - работает. Но что не так у меня я не понимаю... всё тоже самое =\
Вот мой проект, интересно очень в чем проблема.
Нажмите для просмотра прикрепленного файла
silver47
а что за класс MainWindow? Реализация его есть, а заголовочника нет.
xu-user
Нету же ни того ни другого :blink: Где вы его увидели ?
silver47
Ошибка в файле UI.
Вы Выбрали какой шаблон при создании файла UI? Наверняка, по-умолчанию - QMainWindow :) вот отсюда и все грабли.
xu-user
Аа.. всё тогда ясно. Засада. Просто я в начале делал этот ui фаил как отдельную программу, он там и был mainwindow, а потом создал уже SortDialog и туда запихал его, а хедер и реализацию написал новую как QDialog. В том проекте всё было верно, а тут не совпало. Вот и косяк :unsure:
Благодарю за помощь.
Алексей1153
class SortDialog : public QDialog, public Ui::SortDialog

->
class SortDialog : public QMainWindow, public Ui::SortDialog



SortDialog::SortDialog(QWidget *parent)
    : QDialog(parent)

->
SortDialog::SortDialog(QWidget *parent)
     : QMainWindow(parent)


:)
silver47
Вообще достаточно было выбрать нужный шаблон.
Файл - новый проект - GUI приложение - указываем название и путь, куда исходники сохранять, Указываем конфигурацию сборки(чаще всего Desktop), А вот и выбор шаблона:
Имя класса : (по умолчанию - MainWindow) Пишем - SortDialog
Базовый класс: (по умолчанию - QMainWidnow) выбираем - QDialog (мы же диалог создаем?)
и все... жмем далее и радуемся )
Litkevich Yuriy
Цитата(silver47 @ 22.6.2011, 14:04) *
sortdialog.h дополниться:
namespace Ui {
class SortDialog;
}
в этом нет нужды, у него заголовочник сразу подключается
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2019 IPS, Inc.