Доброго времени суток.
Делал пример по книжке Бланшет-Саммерфильд, компилируется нормально, но при запуске выдаёт "прекращение работы программы" Что не так, понять не могу.
Вот исходники:
хедер окна диалога:
#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();
}
откуда берутся указатели secondaryGroupeBox, tertiaryGroupeBox, layout() и на что они, по вашему, указывают?
class SortDialog:public QDialog, public Ui::SortDialog
Вот отсюда думал, если наследовать "Ui::SortDialog" то можно обращаться к элементам формы сразу по имени. Qt мне сразу дописывал их названия, вот и решил что видит значит.
не так ?
У Вас есть форма этого диалога, на котором Вы разместили в дизайнере эти элементы?
В общем так:
если использовался дизайнер для создания формы (имеет место быть файл sortdialog.ui в директории с проектом), то:
sortdialog.h дополниться:
namespace Ui {
class SortDialog;
}
// разрыв
private:
Ui::SortDialog *ui;
SortDialog::SortDialog(QWidget *parent) : QWidget(parent), ui(new Ui::SortDialog)
{
ui->setupUi(this);
// теперь Ваш текс:
ui->secondaryGroupeBox->hide();
ui->tertiaryGroupeBox->hide();
}
Да, использовался дизайнер. Сделал как написано, жалуется на строчку "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*)
Запустите то, что я прислал. Пришлите сюда свой вариант, который не работает, поглядим.
То что вы прислали - работает. Но что не так у меня я не понимаю... всё тоже самое =\
Вот мой проект, интересно очень в чем проблема.
ExtendedDialog__.zip ( 4.3 килобайт )
: 160
а что за класс MainWindow? Реализация его есть, а заголовочника нет.
Нету же ни того ни другого Где вы его увидели ?
Ошибка в файле UI.
Вы Выбрали какой шаблон при создании файла UI? Наверняка, по-умолчанию - QMainWindow вот отсюда и все грабли.
Аа.. всё тогда ясно. Засада. Просто я в начале делал этот ui фаил как отдельную программу, он там и был mainwindow, а потом создал уже SortDialog и туда запихал его, а хедер и реализацию написал новую как QDialog. В том проекте всё было верно, а тут не совпало. Вот и косяк
Благодарю за помощь.
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)
Вообще достаточно было выбрать нужный шаблон.
Файл - новый проект - GUI приложение - указываем название и путь, куда исходники сохранять, Указываем конфигурацию сборки(чаще всего Desktop), А вот и выбор шаблона:
Имя класса : (по умолчанию - MainWindow) Пишем - SortDialog
Базовый класс: (по умолчанию - QMainWidnow) выбираем - QDialog (мы же диалог создаем?)
и все... жмем далее и радуемся )
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)