我的Qt代码有问题。我想编写一个程序,它采用点坐标,然后该点与该坐标一致。当我构建它时,我的程序没有任何错误或警告,但它在开始时崩溃(MainWindow没有显示)。这是我的代码:
的main.cpp
monster_size
mainwindow.h
#include < QApplication >
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow win;
win.show();
return app.exec();
}
mainwindow.cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWidget>
#include <QAction>
#include <QToolBar>
#include <QTextCodec>
#include <QObject>
#include <QDialog>
#include <QLineEdit>
#include <QPushButton>
#include <QString>
#include "addpoint.h"
class MainWindow: public QMainWindow
{
Q_OBJECT
private:
QToolBar *AddToolbar;
QAction *AddPointAction;
AddPoint *AddPointDialog;
QLineEdit *x;
public:
MainWindow();
void createToolbar();
void createActionAdd();
signals:
public slots:
void PointClicked();
void DialogAccepted();
};
#endif // MAINWINDOW_H
addpoint.h
#include "mainwindow.h"
MainWindow::MainWindow()
{
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
createActionAdd();
createToolbar();
connect(AddPointAction, SIGNAL(triggered(bool)), this, SLOT(PointClicked()));
connect(AddPointDialog, SIGNAL(accepted()), this, SLOT(DialogAccepted()));
setMinimumSize(480, 320);
}
/**/
void MainWindow::createToolbar()
{
AddToolbar = new QToolBar;
AddToolbar->addAction(AddPointAction);
addToolBar(AddToolbar);
}
/**/
void MainWindow::createActionAdd()
{
AddPointAction = new QAction("Add Road", this);
x = new QLineEdit(this);
x->setFixedSize(100, 30);
x->move(100, 100);
}
/**/
void MainWindow::PointClicked()
{
AddPointDialog = new AddPoint(this);
AddPointDialog->setModal(true);
AddPointDialog->exec();
}
/**/
void MainWindow::DialogAccepted()
{
x->setText("abc");
}
addpoint.cpp
#ifndef ADDPOINT_H
#define ADDPOINT_H
#include <QWidget>
#include <QTextCodec>
#include <QDialog>
#include <QObject>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QString>
class AddPoint : public QDialog
{
Q_OBJECT
private:
QLabel *XpointL;
QLineEdit *XPoint;
QPushButton *OKButton;
public:
AddPoint(QWidget *parent);
void createButton();
signals:
public slots:
};
#endif // ADDPOINT_H
运行程序后,我在aplication output lap中看到: &#34;该计划意外完成。&#34; &#34; C:\ QT \ build-xxx-Desktop_Qt_5_4_2_MSVC2013_64bit-Debug \ debug \ xx.exe崩溃&#34;
我注意到我用这段代码做了一些实验,我发现我在mainwindow.cpp遇到信号问题()。我不知道该怎么办这个问题。我希望你能帮助我。
答案 0 :(得分:0)
AddPointDialog
是未初始化的指针,它尚未指向AddPoint
构造函数中的有效MainWindow
。你无法就此致电connect
。当您执行AddPointDialog = new AddPoint(this);
时,其价值会稍后更改,然后您才能拨打connect
。
简单地说,您应该在初始化指针后将connect
电话移至void MainWindow::PointClicked()
。我还会将AddPointDialog
置于该功能的本地并将其存储在堆栈中(您不会在其他任何地方使用它并且您会泄漏内存)。
代码如下:
void MainWindow::PointClicked()
{
AddPoint AddPointDialog(this);
AddPointDialog.setModal(true);
connect(&AddPointDialog, SIGNAL(accepted()), this, SLOT(DialogAccepted()));
AddPointDialog.exec();
}