我有一个控制台QT应用程序。现在我需要添加GUI。所以我创建了一个新的GUI应用程序并将我的控制台应用程序源文件添加到GUI应用程我添加了一个不起作用的按钮。我想connect()不起作用,因为没有调用myapp-> start()。但触发事件的正确方法是什么?
这是头文件:
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void startProgram();
private:
Ui::MainWindow *ui;
MyApp *myapp;
QPushButton *startButton;
};
这是源文件:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
myapp = new MyApp;
startButton = new QPushButton("Start");
QObject::connect(startButton, SIGNAL(clicked()), this, SLOT(startProgram()) );
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::startProgram()
{
myapp->start();
}
答案 0 :(得分:2)
您是否在QtCreator中创建了startButton,因为您没有将其添加到代码中的任何窗口小部件或布局中?
如果是这种情况,您可能正在MainWindow构造函数中创建一个新的startButton。当应用程序启动时,您按下在QtCreator中创建的startButton,但该按钮尚未连接到任何插槽。在MainWindow中创建的startButton根本不会显示在UI中。
只需检查QtCreator中startButton的对象名称是什么,并将其连接到startProgram()-slot。连接必须在UI初始化之后完成(ui-> setupUi(this);)。