QT GUI中的connect方法不起作用

时间:2015-09-07 00:20:45

标签: c++ qt user-interface

我有一个控制台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();
}

1 个答案:

答案 0 :(得分:2)

您是否在QtCreator中创建了startButton,因为您没有将其添加到代码中的任何窗口小部件或布局中?

如果是这种情况,您可能正在MainWindow构造函数中创建一个新的startButton。当应用程序启动时,您按下在QtCreator中创建的startButton,但该按钮尚未连接到任何插槽。在MainWindow中创建的startButton根本不会显示在UI中。

只需检查QtCreator中startButton的对象名称是什么,并将其连接到startProgram()-slot。连接必须在UI初始化之后完成(ui-> setupUi(this);)。