У меня проблема с моим приложением в Qt, я использую QMainWindow и пытаюсь установить 2 QComboBox, как я делал для других виджетов, но приложение вылетает в setupUi:
Voilà ma classe MainWindow, elle fonctionnait parfaitement et s’affichait jusqu’à ce que j’jjoute les 2 Combobox.
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
MainWindow(Map *inMap, int dim1, int dim2);
~MainWindow();
public slots:
void boutonClicked();
private:
Ui::MainWindow *_ui;
QPushButton *_bouton;
Canvas *_canvas;
QComboBox *_boxDim1;
QComboBox *_boxDim2;
};
Отказ от участия в программе ComboBox, аварийное завершение программы и ее восстановление:
MainWindow::MainWindow(Map *inMap, int dim1, int dim2)
{
_ui->setupUi(this);
_boxDim1 = new QComboBox();
_boxDim2 = new QComboBox();
_canvas = new Canvas(inMap, dim1, dim2);
_bouton = new QPushButton("Test !");
_bouton->setToolTip("Bouton a push");
_bouton->setCursor(Qt::PointingHandCursor);
connect(_bouton, SIGNAL(clicked()), this, SLOT(boutonClicked()));
QWidget *q = new QWidget();
setCentralWidget(q);
QGridLayout *mainLayout = new QGridLayout();
mainLayout->addWidget(_canvas, 1, 0, 1, 1);
mainLayout->addWidget(_bouton, 2, 0, 1, 1);
q->setLayout(mainLayout);
}
Aprés débuggage dans ddd, le point точно du segfault соответствуют:
_ui->setupUi(this);
Et à l’intérieur de Cette:
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objetName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(800, 600);
centralwidget = new QWidget(MainWindow) /// Segfault ici.
Он делает все возможное, чтобы у вас возникли проблемы с творчеством и творчеством, а также с точки зрения качества и взаимности.
Ваш _ui
переменная не инициализируется, поэтому вылетает. Вам нужно что-то вроде: _ui = new Ui::MainWindow();
… также это хорошая привычка MainWindow
взять QObject
параметр в качестве родителя во втором конструкторе. Или просто используйте первый и добавьте дополнительные параметры, которые вам нужны.
Других решений пока нет …