qt4求救,拜託大大幫幫忙(qt新手)

歡迎提問 debian desktop 相關問題,何謂 desktop ? 舉凡您日常生活會用到的部份,如上網 ( www 、 bbs ..) 、程式設計、繪圖...等等。 通常以 X Window 環境底下問題為主。

qt4求救,拜託大大幫幫忙(qt新手)

文章訪客 » 週六 6月 06, 2009 11:17 pm

請問一下,我用Qt Creator建立了一個qt4 gui的pro,做了一個button,當按下button要關掉這個視窗,為什我第一次按都沒動作,第2次按button才會關掉主視窗

mainwindow.cpp
===================================================



#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);

}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_clicked()
{
QObject::connect(ui->pushButton, SIGNAL(clicked()),this, SLOT(close()));
}
訪客
 

文章訪客 » 週日 6月 07, 2009 12:13 am

說也奇怪,假如不用手動加程式碼,直接用Qt Creator滑鼠拖拉(F4),他signal/slot是加到ui_mainwindow.h這個檔,按一次button就會關掉主視窗,請問大大這是差在哪?真是搞不懂?
/********************************************************************************
** Form generated from reading ui file 'mainwindow.ui'
**
** Created: Sun Jun 7 00:00:18 2009
** by: Qt User Interface Compiler version 4.5.1
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QMainWindow>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QScrollArea>
#include <QtGui/QStatusBar>
#include <QtGui/QToolBar>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
QWidget *centralWidget;
QScrollArea *scrollArea;
QWidget *scrollAreaWidgetContents;
QPushButton *pushButton;
QPushButton *pushButton_2;
QMenuBar *menuBar;
QToolBar *mainToolBar;
QStatusBar *statusBar;

void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(600, 400);
centralWidget = new QWidget(MainWindow);
centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
scrollArea = new QScrollArea(centralWidget);
scrollArea->setObjectName(QString::fromUtf8("scrollArea"));
scrollArea->setGeometry(QRect(50, 50, 331, 141));
scrollArea->setWidgetResizable(true);
scrollAreaWidgetContents = new QWidget();
scrollAreaWidgetContents->setObjectName(QString::fromUtf8("scrollAreaWidgetContents"));
scrollAreaWidgetContents->setGeometry(QRect(0, 0, 325, 135));
scrollArea->setWidget(scrollAreaWidgetContents);
pushButton = new QPushButton(centralWidget);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(60, 240, 111, 81));
pushButton_2 = new QPushButton(centralWidget);
pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
pushButton_2->setGeometry(QRect(260, 240, 121, 81));
MainWindow->setCentralWidget(centralWidget);
menuBar = new QMenuBar(MainWindow);
menuBar->setObjectName(QString::fromUtf8("menuBar"));
menuBar->setGeometry(QRect(0, 0, 600, 21));
MainWindow->setMenuBar(menuBar);
mainToolBar = new QToolBar(MainWindow);
mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
statusBar = new QStatusBar(MainWindow);
statusBar->setObjectName(QString::fromUtf8("statusBar"));
MainWindow->setStatusBar(statusBar);
QWidget::setTabOrder(pushButton, scrollArea);
QWidget::setTabOrder(scrollArea, pushButton_2);

retranslateUi(MainWindow);
QObject::connect(pushButton_2, SIGNAL(clicked()), MainWindow, SLOT(close()));

QMetaObject::connectSlotsByName(MainWindow);
} // setupUi

void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
pushButton->setText(QApplication::translate("MainWindow", "\347\242\272\345\256\232", 0, QApplication::UnicodeUTF8));
pushButton_2->setText(QApplication::translate("MainWindow", "\345\217\226\346\266\210", 0, QApplication::UnicodeUTF8));
Q_UNUSED(MainWindow);
} // retranslateUi

};

namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H
訪客
 

Re: qt4求救,拜託大大幫幫忙(qt新手)

文章FourDollars » 週日 6月 07, 2009 12:31 am

把 QObject::connect(ui->pushButton, SIGNAL(clicked()),this, SLOT(close())); 放在 ui->setupUi(this); 之後就可以了~

Anonymous 寫:請問一下,我用Qt Creator建立了一個qt4 gui的pro,做了一個button,當按下button要關掉這個視窗,為什我第一次按都沒動作,第2次按button才會關掉主視窗

mainwindow.cpp
===================================================



#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);

}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_clicked()
{
QObject::connect(ui->pushButton, SIGNAL(clicked()),this, SLOT(close()));
}
FourDollars
懵懂的國中生
懵懂的國中生
 
文章: 188
註冊時間: 週五 8月 01, 2003 12:47 am

文章訪客 » 週日 6月 07, 2009 12:50 am

哇,高手,真的ㄟ
正如你講的,竟然可以了,可在問你一下嗎
我是用qt creator在button元件,按滑鼠右鍵,選go to slot ...
他就會自動加入
void MainWindow::on_pushButton_clicked()
{

}

直覺會讓我,不是應該把程式碼加在這裡面,怎會加到那邊去

感謝窩
訪客
 

文章70630515 » 週日 6月 07, 2009 9:52 am

因為你選go to slot...

3f真的是高手!!
我不自私,因為我開放(Open) , 我很快樂,因為我分享(Share)–Open Source
頭像
70630515
懵懂的國中生
懵懂的國中生
 
文章: 160
註冊時間: 週一 3月 13, 2006 9:15 am
來自: 北鼻存錢筒

文章訪客 » 週一 6月 15, 2009 11:47 am

後來我發現這樣是最正確的,這樣就能關掉主視窗
void MainWindow::on_pushButton_clicked()
{
this->close() ;
this->destroy();
}
訪客
 


回到 debian desktop

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客