QT4에서 생성 된 GUI가있는 오픈 소스 코드로 작업하고 있습니다. 내가하고 싶은 일은 GUI에서 버튼을 눌러야하는 순간에 코드를 약간 변경하는 것입니다. 내가 원하는 것은 함수를 호출하여 버튼을 눌러 실행할 필요가 없기 때문입니다.슬롯 인 Qt 함수를 호출하는 방법은 무엇입니까?
이 함수는 공개 슬롯 아래 tum_ardrone_gui 클래스에 정의되어 있습니다. 기능은 SendClicked()가 호출 그래서 나는 같은 객체를 정의하여 함수를 호출했다 :
tum_ardrone_gui* gui;
gui->SendClicked();
나는 오류가 그러니 내 구문이 잘못 또는 내가 좋아하는 '슬롯'정의 함수를 호출 할 수 없습니다입니다 수 이?
미리 감사드립니다.
편집 1 : 모두에게 도움을 주셔서 감사합니다.
#include "../UINode/tum_ardrone_gui.h"
#include "../UINode/RosThread.h"
#include "../UINode/PingThread.h"
#include <QtGui>
#include <QApplication>
#include "ros/ros.h"
// this global var is used in getMS(ros::Time t) to convert to a consistent integer timestamp used internally pretty much everywhere.
// kind of an artifact from Windows-Version, where only that was available/used.
unsigned int ros_header_timestamp_base = 0;
int main(int argc, char *argv[])
{
std::cout << "Starting drone_gui Node" << std::endl;
// ROS
ros::init(argc, argv, "drone_guiuno");
RosThread t;
PingThread p;
// UI
QApplication a(argc, argv);
tum_ardrone_gui w;
// make them communicate with each other
t.gui = &w;
w.rosThread = &t;
p.gui = &w;
p.rosThread = &t;
w.pingThread = &p;
// start them.
t.startSystem();
p.startSystem();
w.show();
// Error 1):
//tum_ardrone_gui gui = new tum_ardrone_gui();
//gui->SendClicked();
//delete gui;
// DOES NOT COMPILE: ERROR MESSAGE /usr/include/qt4/QtGui/qwidget.h: In copy constructor ‘tum_ardrone_gui::tum_ardrone_gui(const tum_ardrone_gui&)’:
// /usr/include/qt4/QtGui/qwidget.h:806:5: error: ‘QWidget::QWidget(const QWidget&)’ is private
//Error 2): Compiles and works! But why didn't the above?
w.SendClicked();
// wait until windows closed....
int ec = a.exec();
// stop ROS again....
t.stopSystem();
p.stopSystem();
std::cout << "Exiting drone_gui Node" << std::endl;
return ec;
}
무엇을 얻고 있습니까? – khajvah
@khajvah : Segfault, 아마도. 그는'tum_ardrone_gui' 객체를 만들지 않았습니다. –
@VioletGiraffe 그래, 맞아. 내가 그것을 놓쳤다는 것을 믿을 수 없다 : D – khajvah